Py学习  »  DATABASE

在mysqli pdo中如何使用带限制的select?

Tashi Chozom • 5 年前 • 1287 次点击  

这个问题已经有了答案:

我正在尝试使用mysqli pdo运行查询,以按降序获取一些行。

我正在使用mysqli 5.7.27和php 7.2。

$con = new PDO(".....");
$sql1 = "SELECT * FROM `tab` ORDER BY DESC LIMIT :start, :limit";
$sql2 = "SELECT * FROM `tab` ORDER BY DESC LIMIT 0, 2";

$stmt = $con->preapre($sql1);
$stmt->execute(['start'=>0, 'limit'=>2]);
$array = $stmt->fetchAll();
foreach($array as $rows) {
     //Getting empty here
}

Sql 别跟我吵架。然而, 平方二 给我排成排。我想和 Sql . 这里有什么错误?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/39412
 
1287 次点击  
文章 [ 2 ]  |  最新文章 5 年前
Nathan Dawson
Reply   •   1 楼
Nathan Dawson    5 年前

限制要求偏移量和计数为整数。你的问题是 :start :limit 正在将类型转换为字符串。

一个简单的解决方案是先将值转换为整数。

$stmt->bindValue(':start', (int) 0, PDO::PARAM_INT); // make sure to keep (int) when passing in a variable.
$stmt->bindValue(':limit', (int) 2, PDO::PARAM_INT);
Tim Biegeleisen
Reply   •   2 楼
Tim Biegeleisen    5 年前

不能为中的值使用参数 LIMIT 范围在mysql中。解决方法之一可能是使用行数,然后限制为一系列值:

SELECT *
FROM
(
    SELECT t.*,
        @rn := @rn + 1 AS rn
    FROM tab t,
       (SELECT @rn := 0) r
) t
WHERE rn BETWEEN :start AND :end;

例如,如果您想要第4和第5个记录,您可以使用:

$stmt = $con->preapre($sql1);
$stmt->execute(['start'=>4, 
'end'=>5]);
$array = $stmt->fetchAll();