PDO MySQL LIMIT неожиданный результат запроса - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь показать список файлов и создать базовую c систему нумерации страниц. Я застрял на этом, потому что вывод запроса MySQL с PDO отличается от самого 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

PS: я все еще не уверен, почему строки печатаются только с этим, казалось бы, неправильным while оператором, но не с правильным сравнением ==:

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

1 Ответ

0 голосов
/ 30 мая 2020

Вы выбираете один раз перед тем, как вы вводите l oop, в результате первая строка в основном пропускается до того, как она получит возможность напечатать. Просто удалите эту нежелательную выборку, и ваш код должен вести себя так, как вы ожидаете.

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