ホームページ > バックエンド開発 > PHPチュートリアル > SQL で変数をプリペアドステートメントと適切に連結するにはどうすればよいですか?

SQL で変数をプリペアドステートメントと適切に連結するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-16 02:50:11
オリジナル
462 人が閲覧しました

How to Properly Concatenate Variables with Prepared Statements in SQL?

プリペアド ステートメントと変数の連結

プリペアド ステートメントを使用する場合、変数を SQL クエリと適切に連結することが重要です。構文が正しくないと、次のコード フラグメントで発生するようなエラーが発生する可能性があります。

$sql = 'SELECT * FROM `users` WHERE username LIKE \'%{$var}%' '; // Error: Number of variables doesn't match number of parameters
$sql = 'SELECT * FROM `users` WHERE username LIKE %{?}% '; // Error: Wrong SQL
ログイン後にコピー

正しいアプローチ

これらのエラーを回避するには、次の手順を実行します。

  1. 準備されたパラメータの外側にあるワイルドカードとパラメータを連結します。ステートメント:
$likeVar = "%" . $yourParam . "%";
ログイン後にコピー
  1. ? を使用してクエリを準備します。プレースホルダーとして:
$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ?");
ログイン後にコピー
  1. 準備されたステートメントにパラメーターをバインドします:
$stmt->bind_param("s", $likeVar);
ログイン後にコピー

この例では、$likeVar には、次の値が含まれています。ワイルドカード (「%...%」) を使用して検索します。これを s (文字列) パラメータ タイプにバインドすると、データベース クエリで適切に処理されるようになります。

大文字と小文字の区別

大文字と小文字を区別しない検索が必要な場合は、COLLATE utf8mb4_bin 句をクエリ:

$stmt = $mysqli->prepare("SELECT * FROM REGISTRY where name LIKE ? COLLATE utf8mb4_bin");
ログイン後にコピー

以上がSQL で変数をプリペアドステートメントと適切に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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