ホームページ >バックエンド開発 >PHPチュートリアル >MySQL のプリペアド ステートメントで複数のバインドされたパラメータをパターン マッチングに効率的に使用するにはどうすればよいですか?

MySQL のプリペアド ステートメントで複数のバインドされたパラメータをパターン マッチングに効率的に使用するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-05 07:20:11812ブラウズ

How Can I Efficiently Use Multiple Bound Parameters in MySQL Prepared Statements for Pattern Matching?

バインドされたパラメータの複数の使用

基本的なデータベース検索エンジンを作成する際、開発者はさまざまな種類の情報を含めて検索する必要が生じる場合があります。複数のテーブルからのデータ。パターン マッチングにバインドされたパラメーターを持つプリペアド ステートメントを使用する場合、PDO ドキュメントでは、同じ名前のパラメーター マーカーを複数回使用しないように警告しています。

この制限を回避するには、考えられる解決策の 1 つは、各 :term パラメーターを :termX に置き換えることです。 (X は term = n を表します)。ただし、これは面倒でエラーが発生しやすい可能性があります。

別のアプローチは、MySQL ユーザー定義変数を利用することです。これらの変数にパラメータを格納すると、コードが読みやすくなり、追加の PHP 関数が必要なくなります。その仕組みは次のとおりです:

例:

$sql = "SET @term = :term";

try {
    $stmt = $dbh->prepare($sql);
    $stmt->bindValue(":term", "%$term%", PDO::PARAM_STR);
    $stmt->execute();
} catch (PDOException $e) {
    // error handling
}

$sql = "SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term";

try {
    $stmt = $dbh->prepare($sql);
    $stmt->execute();
    $stmt->fetchAll();
} catch (PDOException $e) {
    // error handling
}

ユーザー定義変数の利点:

  • コードの可読性を向上させます
  • を排除します追加の PHP 関数の必要性
  • MySQL のセッションバインド変数によるマルチユーザー環境での副作用なし

考慮事項:

追加の MySQL クエリが必要ですが、パフォーマンス上の懸念を考慮する必要がある場合があります。

以上がMySQL のプリペアド ステートメントで複数のバインドされたパラメータをパターン マッチングに効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。