3

我还有其他可以正常执行的 PDO 语句,但是这个语句搞砸了。

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->execute( array( 0, 10 ) );

以上不工作,但以下工作:

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT 0,10' );
$sth->execute( array( 0, 10 ) );

那么,当第一种方法应该给出相同的响应时,为什么不显示我的任何结果呢?


这就是我现在所拥有的

$start = 0;
$perpage = 10;

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindValue(1, $start, PDO::PARAM_INT);
$sth->bindValue(2, $perpage, PDO::PARAM_INT);
$sth->execute(); 

这也行不通

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindParam(1, 0, PDO::PARAM_INT);
$sth->bindParam(2, 10, PDO::PARAM_INT);
$sth->execute();
4

4 回答 4

3

问题很可能是 PDO 会将任何输入解释为字符串。你可以试试

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT :low,:high' );
$sth->bindValue(':low', 0, PDO::PARAM_INT);
$sth->bindValue(':high', 10, PDO::PARAM_INT);
$sth->execute();

或者

$low = 0;
$high = 10;
$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT :low,:high' );
$sth->bindParam(':low', $low, PDO::PARAM_INT);
$sth->bindParam(':high', $high, PDO::PARAM_INT);
$sth->execute();

资料来源:如何在 LIMIT 子句中应用 bindValue 方法?

于 2012-09-20T16:12:23.817 回答
0

不确定您是否看到了这个问题,但您是否尝试过将您发送的值转换为整数?

$start = 0;
$perpage = 10;

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindValue(1, (int)$start, PDO::PARAM_INT);
$sth->bindValue(2, (int)$perpage, PDO::PARAM_INT);
$sth->execute(); 

或者它说要这样做:

$start = 0;
$perpage = 10;

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT ?,?' );
$sth->bindValue(1, intval($start), PDO::PARAM_INT);
$sth->bindValue(2, intval($perpage), PDO::PARAM_INT);
$sth->execute(); 
于 2012-09-20T18:08:12.857 回答
0

这是因为“准备”并使用数组参数执行认为您的数据默认是字符串。所以他们用''逃避他们。问题在于,当您处理限制时,这些引号会触发错误。解决方案是 bindValue

$sth = $dbh->prepare( 'SELECT * FROM `post` LIMIT :number OFFSET :start' );
$sth->bindValue("number",10, PDO::PARAM_INT);
$sth->bindValue("start",0,PDO::PARAM_INT);
$sth->execute();
于 2012-09-20T16:11:50.667 回答
-1

什么数据库?MySQL?SQL 服务器?甲骨文?

在 MySQL 中,带有LIMIT子句的 PDO 应该像 GlaciesofPacis 的帖子一样工作。但是,如果您使用的是 SQL SERVER,则您没有使用正确的语法。引用自StackOverflow问题:

$query = "
DECLARE @Sort
SET ROWCOUNT :startRow
SELECT @Sort = SortColumn FROM Table ORDER BY SortColumn
SET ROWCOUNT :pageSize
SELECT ... FROM Table WHERE SortColumn >= @Sort ORDER BY SortColumn
";

$dbh->prepare($query);
$sth->bindParam(':startRow',0, PDO::PARAM_INT);
$sth->bindParam(':pageSize',10, PDO::PARAM_INT);
$sth->execute();
于 2012-09-20T17:25:58.960 回答