使用LIMIT子句的MySQL错误1064

杰里米·哈里斯(Jeremy Harris)

我在通过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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章