MySQL 错误 1064 使用 LIMIT 子句


MySQL Error 1064 Using LIMIT Clause

我遇到了一个奇怪的问题,通过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 ?'

我尝试在查询末尾放置分号,但这会产生相同的错误。我有脑胀气并错过了一些明显的东西吗?


博士;为什么我的预准备语句在使用带有 1064 错误的 LIMIT 子句时失败?

我认为这可能是重复的PDO Mysql 语法错误 1064

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

只需将 (int) 放在极限值之前