ユーザー定義変数を使用したプリペアド ステートメントで繰り返されるパラメーターの問題を解決する
データベース検索エンジンの構築には、多くのユーザー入力パラメーターが必要となることがよくあります。 ただし、準備されたステートメント内で同じ名前付きパラメーター マーカーを直接再利用することは、通常はサポートされていません。
より優れた代替手段は、MySQL ユーザー定義変数を利用することです。この方法により、コードの明瞭さと読みやすさが向上します。
このソリューションを実装する方法は次のとおりです:
<code class="language-sql">$sql = "SET @term = :term"; try { $stmt = $dbh->prepare($sql); $stmt->bindValue(":term", "%$term%", PDO::PARAM_STR); $stmt->execute(); } catch (PDOException $e) { // Error handling }</code>
<code class="language-sql">$sql = "SELECT ... FROM table WHERE name LIKE @term OR number LIKE @term"; try { $stmt = $dbh->prepare($sql); $stmt->execute(); $result = $stmt->fetchAll(); //More descriptive variable name } catch (PDOException $e) { // Error handling }</code>
この手法により、単一のパラメーター マーカーを複数回再利用できるようになり、名前付きパラメーターを直接繰り返す制限を回避できます。変数を設定するために追加の MySQL クエリが導入されますが、結果として得られるコードの読みやすさと単純さの向上により、多くの場合、このわずかなオーバーヘッドが正当化されます。
以上がMySQL のユーザー定義変数は、準備されたステートメントで繰り返されるパラメーターの問題をどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。