PDO Mysql Syntax error 1064 [closed]

廉价感情. 提交于 2019-12-01 06:16:06

问题


I run the following code:

$conn = new PDO(....);
.... pdo attributes ...

$limitvalue = 0;
$limit = 10;
$sql = $conn->prepare("SELECT * FROM table1 LIMIT ?, ?");
$sql->bindParam(1, $limitvalue, PDO::PARAM_INT);
$sql->bindParam(2, $limit, PDO::PARAM_INT);
$sql->execute();

And i get:

Uncaught exception 'PDOException' with message '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 'NULL, 10' at line 1'

It happens only with this particular query. Everything else is OK.

Btw: I know it may look stupid that i do prepared statements for "in-code" values. But it is just an example. In fact the values are depending on the page number but it doesn't matter here - this query is giving the same error too.


If anybody is interested, the PHP version is: 5.3.4RC2 and MySQL's is: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $


回答1:


This seems to be a php bug : PDO ignores the PARAM_INT constant and use the $limit and $limitvalue variables as string. Which are quoted in the query when bound.

Try using :

$sql->bindParam(1, (int)$limitvalue, PDO::PARAM_INT);
$sql->bindParam(2, (int)$limit, PDO::PARAM_INT);

To force the variables type to int.




回答2:


I don't think that the first parameter of the limit in the sql can be NULL. If you just want the first 10 records then use LIMIT 10.



来源:https://stackoverflow.com/questions/6777154/pdo-mysql-syntax-error-1064

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!