ホームページ > データベース > mysql チュートリアル > SQL LIMIT 句でバインド変数を正しく使用するにはどうすればよいですか?

SQL LIMIT 句でバインド変数を正しく使用するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-24 00:21:08
オリジナル
710 人が閲覧しました

How to Correctly Use Bind Variables in a SQL LIMIT Clause?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート