問題を見つけることができない 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 構文にエラーがあります。5 行目の ''5'' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
準備後のPDOStatementオブジェクトのダンプは次を示します。
object(PDOStatement)[59]
public 'queryString' => string 'SELECT * FROM mydb.Product
WHERE ProductId >= ?
AND IsApproved = 1
AND IsPublic = 1
LIMIT ?'
クエリの最後にセミコロンを入れてみましたが、同じエラーが発生します。私は脳内鼓腸を患っており、明らかな何かが欠けていますか?
TL;DR; 1064 エラーで LIMIT 句を使用すると、準備済みステートメントが失敗するのはなぜですか?