SQL LIMIT 句でバインド変数を正しく使用する
質問:
bindValue
を使用して LIMIT 句の skip
および max
値を設定しようとすると、変数に一重引用符が追加されるため、生成された SQL ステートメントは無効になります。この問題を解決するにはどうすればよいでしょうか?
答え:
この問題を解決するには、変数値を bindValue
関数に渡す前に整数にキャストします。これにより、一重引用符が追加されなくなり、SQL 構文エラーが解決されます。
以下は変更されたコードです:
<code class="language-php">$fetchPictures = $PDO->prepare("SELECT * FROM pictures WHERE album = :albumId ORDER BY id ASC LIMIT :skip, :max"); $fetchPictures->bindValue(':albumId', (int)$_GET['albumid'], PDO::PARAM_INT); // 强制转换为整数 if(isset($_GET['skip'])) { $fetchPictures->bindValue(':skip', (int) trim($_GET['skip']), PDO::PARAM_INT); } else { $fetchPictures->bindValue(':skip', 0, PDO::PARAM_INT); } $fetchPictures->bindValue(':max', (int)$max, PDO::PARAM_INT); // 强制转换为整数 $fetchPictures->execute() or die(print_r($fetchPictures->errorInfo())); $pictures = $fetchPictures->fetchAll(PDO::FETCH_ASSOC);</code>
重要なのは、$_GET['albumid']
の前に $max
変数と bindValue
変数を整数型に明示的に変換することです。 これにより、PDO がそれらを文字列として扱い、一重引用符を追加して LIMIT 句で構文エラーが発生することを回避します。 trim()
関数は、$_GET['skip']
変数内の余分なスペースを削除するために使用されます。
以上がSQL LIMIT 句でバインド変数を正しく使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。