MySQL错误1064使用LIMIT子句

时间:2013-09-10 15:01:14

标签: php mysql pdo prepared-statement

我遇到一个奇怪的问题,通过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子句时,我的预准备语句会失败?

2 个答案:

答案 0 :(得分:2)

我认为这可能是重复的 PDO Mysql Syntax error 1064

解决方法是绑定limit参数,强制它为int而不是带有简单(int)强制转换的字符串。

答案 1 :(得分:0)

将(int)放在限制值之前