pdo mysql limit查询意外结果

fhity93d  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(396)

我试图显示一个文件列表,并创建一个基本的分页系统。我被困在这个问题上是因为带有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

p、 s:我仍然不确定为什么打印出来的线条看起来是错的 while 语句,但没有正确的比较 == :

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

55ooxyrt1#

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

$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)) {
    ...
}

相关问题