ホームページ >データベース >mysql チュートリアル >文字列パラメータを使用すると、LIMIT を指定した MySQL プリペアド ステートメントが失敗するのはなぜですか?
問題:
MySQL で LIMIT 句を使用してプリペアド ステートメントを使用する場合、パラメータが次のように渡されると失敗します。 strings.
SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ?
$comments = $db->prepare($query); $comments->execute(array($post, $min, $max));
回答:
この問題は、PDOStatement::execute() メソッドがすべてのパラメータを文字列として扱い、無効なパラメータが発生するために発生します。 SQL ステートメント。 MySQL が文字列パラメーターを数値にキャストしないため、解析エラーが発生するという事実により、この問題はさらに悪化します。
解決策:
$comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, PDO::PARAM_INT);
$query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
以上が文字列パラメータを使用すると、LIMIT を指定した MySQL プリペアド ステートメントが失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。