7

我使用以下 sql 来获取我的表的特定行的字段的值que_id,它工作正常。请注意 que_id(auto-incremented) 和行号是不一样的。

$qry_que_getid = $connexion->query('SELECT somefield FROM table ORDER BY somefield ASC LIMIT '.$lineNumberSeeked.', 1');

$row = $qry_que_getid->fetch(PDO::FETCH_ASSOC); 
echo $row['que_id'];

当我尝试按如下方式将该查询转换为准备好的查询时,出现错误并且我没有得到它:

$qry_que_getid = $connexion->prepare('SELECT somefield FROM table ORDER BY somefield ASC LIMIT ?, 1');

$qry_que_getid->execute(array(4));

$row = $qry_que_getid->fetch(PDO::FETCH_ASSOC); 
echo $row['que_id'];

我收到以下错误SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''3', 1' at line 1

希望有人能帮助我理解。先感谢您。干杯。马克。

4

1 回答 1

4

来自http://www.php.net/manual/en/pdostatement.execute.php的 PHP 手册:

一个包含与正在执行的 SQL 语句中的绑定参数一样多的元素的值数组。所有值都被视为 PDO::PARAM_STR。

我相信 LIMIT 子句需要一个整数,因此您应该改用 bindParam() 方法。

$limit = 4;
$qry_que_getid->bindParam(1, $limit, PDO::PARAM_INT);
$qry_que_getid->execute();

否则,参数将作为 PDO::PARAM_STR 类型而不是预期的 PDO::PARAM_INT 传递。

于 2012-05-07T16:37:34.297 回答