ホームページ >バックエンド開発 >PHPチュートリアル >MySQL のプリペアド ステートメントで複数のバインドされたパラメータをパターン マッチングに効率的に使用するにはどうすればよいですか?
バインドされたパラメータの複数の使用
基本的なデータベース検索エンジンを作成する際、開発者はさまざまな種類の情報を含めて検索する必要が生じる場合があります。複数のテーブルからのデータ。パターン マッチングにバインドされたパラメーターを持つプリペアド ステートメントを使用する場合、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 }
ユーザー定義変数の利点:
考慮事項:
追加の MySQL クエリが必要ですが、パフォーマンス上の懸念を考慮する必要がある場合があります。
以上がMySQL のプリペアド ステートメントで複数のバインドされたパラメータをパターン マッチングに効率的に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。