【问题标题】:PDO MySQL LIMIT query unexpected resultPDO MySQL LIMIT 查询意外结果
【发布时间】:2020-09-17 14:51:03
【问题描述】:

我正在尝试显示文件列表并创建一个基本的分页系统。 我之所以坚持这一点,是因为使用 PDO 的 MySQL 查询的输出与 MySQL 本身不同。

这是代码部分:

$sql = "SELECT * FROM libri ORDER BY bookname;";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);

if ($row > 0) {
  // output data of each row

    $countStart = ($page-1)*$page;
    //Listing da database
    $sql = "SELECT * FROM libri ORDER BY bookname LIMIT 0,3";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $book = $row["bookname"];
    $path = $host."/libreria/lib-folder/".$row["bookname"];
    $truepath = basename($path);
    $coverName = $truepath."-cover.png";
    $fileArr = explode('.', $book);
    $fileExt = strtolower(end($fileArr));

    echo "<a href='$truepath'>".$row["bookname"]."</a><br>";

让我烦恼的是,带有 LIMIT 的查询的行为与我在 mysql 上看到的不同:在 mysql CLI 上我得到的查询相同

+----+---------------------+
| id | bookname            |
+----+---------------------+
| 12 | book.pdf            |
|  1 | book2.pdf           |
| 13 | book3.pdf           |
+----+---------------------+

但在网页上我只能打印出来

book2
book3

附: :我仍然不确定为什么这些行只用这个看似错误的while 语句打印,而不是用正确的比较==

while($row = $stmt->fetch(PDO::FETCH_ASSOC))

【问题讨论】:

    标签: php mysql sql pdo sql-limit


    【解决方案1】:

    您在进入循环之前 获取一次,导致第一行在有机会打印之前基本上被绕过。只需删除这个不需要的提取,您的代码就会按照您的预期运行。

    $sql = "SELECT * FROM libri ORDER BY bookname LIMIT 0,3";
    $stmt = $pdo->prepare($sql);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC); # --> here
    
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        ...
    }
    

    【讨论】:

    • 谢谢,成功了!可以肯定的是,在while 循环中它是赋值而不是比较实际上是正确的吗? while($row = $stmt-&gt;fetch(PDO::FETCH_ASSOC))
    猜你喜欢
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2012-03-21
    • 2013-01-04
    • 2020-08-01
    • 2018-07-04
    • 2015-01-29
    • 2017-05-18
    相关资源
    最近更新 更多