我在通过PDO准备好的语句运行查询时遇到一个奇怪的问题,我只是无法发现问题。手动运行查询时,它可以正常工作。这是代码(为简洁起见简化):
// Query Parameters
$params = array( 1, 5 );
// Get Products
$query = "SELECT * FROM mydb.Product
WHERE ProductId >= ?
AND IsApproved = 1
AND IsPublic = 1
LIMIT ?";
// Get Database Instance
$dbh = App\App::getDatabase()->getInstance();
// Prepare Query
if( $stmt = $dbh->prepare($query) )
{
if( $stmt->execute($params) )
{
// Return Records
}
}
LIMIT ?
从查询中删除该部分将按预期返回所有结果。相反,当尝试使用LIMIT并且将5作为值传递时,出现此错误:
您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册以获取在第5行的“ 5”附近使用的正确语法
准备之后,PDOStatement对象的转储显示:
object(PDOStatement)[59]
public 'queryString' => string 'SELECT * FROM mydb.Product
WHERE ProductId >= ?
AND IsApproved = 1
AND IsPublic = 1
LIMIT ?'
我试过在查询的末尾放置一个分号,但这给出了相同的错误。我有肠胃气胀并且缺少明显的东西吗?
TL; DR; 为什么在使用带有1064错误的LIMIT子句时,我的准备好的语句会失败?
我认为这可能是PDO Mysql语法错误1064的重复
解决方案是绑定限制参数,强制其为int而不是具有简单(int)强制转换的字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句