PHP MySQL查询不返回所有结果

Posted

技术标签:

【中文标题】PHP MySQL查询不返回所有结果【英文标题】:PHP MySQL query not returning all results 【发布时间】: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%'不需要加引号 【参考方案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";
  

【讨论】:

以上是关于PHP MySQL查询不返回所有结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据查询,共有5000条数据,要有三种返回结果。

PHP/mysql:使用数组查询 MySQL 并在数组中获取结果

如何在执行php脚本后将mysql查询结果返回到html页面?

PHP MySQL 相同的查询返回不同的行数

php mysql 查询只返回第一条数据

php查询sql表中数据,存在则返回显示1,不存在显示0