PHP PDO - >准备好的查询返回错误(同样的查询未准备工作正常)

时间:2012-05-07 16:30:08

标签: php pdo prepared-statement

我使用以下sql来获取表格特定行的字段que_id的值,并且它正常工作。请注意,que_id(自动递增)和行号不一样。

$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

希望somene可以帮助我理解。先感谢您。干杯。马克。

1 个答案:

答案 0 :(得分: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传递。