PDO MySQL LIMIT 查询意外结果
PDO MySQL LIMIT query unexpected result
我正在尝试显示文件列表并创建一个基本的分页系统。
我坚持这个是因为 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
P.S。 : 我仍然不确定为什么这些行只用这个看似错误的 while
语句打印,而不是正确的比较 ==
:
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
您在进入循环之前获取一次,导致第一行在有机会打印之前基本上被绕过。只需删除这个不需要的提取,您的代码就会按预期运行。
$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)) {
...
}
我正在尝试显示文件列表并创建一个基本的分页系统。 我坚持这个是因为 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
P.S。 : 我仍然不确定为什么这些行只用这个看似错误的 while
语句打印,而不是正确的比较 ==
:
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
您在进入循环之前获取一次,导致第一行在有机会打印之前基本上被绕过。只需删除这个不需要的提取,您的代码就会按预期运行。
$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)) {
...
}