【问题标题】:PHP MySQL query not returning all resultsPHP MySQL查询不返回所有结果
【发布时间】:2015-06-11 22:06:39
【问题描述】:

我在 PHP 中的以下 SQL 查询不能完全工作。结果仅包含第一行。该查询在 PHPMyadmin 中运行良好,它会返回所有结果。

$select = "SELECT a.setID, a.setName, a.setPrimaryLanguage, a.setSecondaryLanguage
            FROM Person_Set ps, Album a
            WHERE ps.Person_username = :username
            AND ps.Set_setID = a.setID";

  try {
    $stmt = $dbh->prepare($select, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
    $stmt->bindValue(":username", $username, PDO::PARAM_STR);
    $stmt->execute();

    $result = $stmt->fetch();
    echo json_encode($result);

    unset($stmt); 
  } catch (Exception $e) {
    echo 'Exception : ' . $e->getMessage() . "\n";
  }

此外,如果我更改选择条件以搜索包含特定字符串的行,则结果为空(返回“false”)。如下查询:

$select = "SELECT a.setID, a.setName, a.setPrimaryLanguage, a.setSecondaryLanguage
            FROM Album a, Set_Card s
            WHERE a.setName LIKE '%:searchText%'
            AND a.setID = s.Set_setID
            GROUP BY a.setID";

我一直在尝试不同的方式来连接 MySQL 并获得结果,比如

$results = $mysqli->query($query);

而不是使用 PDO。但是,结果仍然相同。谁能帮忙指出我的错误在哪里?非常感谢!

【问题讨论】:

  • 尝试$result = $stmt->fetchAll(); 而不是$result = $stmt->fetch();
  • 另外,命名占位符'%:searchText%'不需要加引号

标签: php mysql ajax pdo


【解决方案1】:

PDOStatement::fetch — 从结果集中获取下一行

因此,当您执行 fetch 时,它会获取第一行,除非您使用将光标更改为下一条记录的循环来执行此操作。

您可以使用fetchAll 方法获取所有记录

http://php.net/manual/en/pdostatement.fetch.php

http://php.net/manual/en/pdostatement.fetchall.php

【讨论】:

    【解决方案2】:

    PDOStatement::fetch 获取单行并将指针移动到下一行。您将使用$results = $stmt->fetchAll() 来检索所有结果或这样的循环:

    while ($result = $stmt->fetch()) {
        echo json_encode($result);
    }
    

    【讨论】:

      【解决方案3】:

      您好,您使用的是仅获取一行的 fetch() 函数,而不是使用此代码,

      $select = "SELECT a.setID, a.setName, a.setPrimaryLanguage, a.setSecondaryLanguage
                  FROM Person_Set ps, Album a
                  WHERE ps.Person_username = :username
                  AND ps.Set_setID = a.setID";
      
        try {
          $stmt = $dbh->prepare($select, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
          $stmt->bindValue(":username", $username, PDO::PARAM_STR);
          $stmt->execute();
      
          $result = $stmt->fetchall();
          echo json_encode($result);
      
          unset($stmt); 
        } catch (Exception $e) {
          echo 'Exception : ' . $e->getMessage() . "\n";
        }
      

      【讨论】:

        猜你喜欢
        • 2014-04-24
        • 1970-01-01
        • 2019-08-08
        • 1970-01-01
        • 1970-01-01
        • 2013-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多