可変数のパラメーターを使用して動的 SQL ステートメントを準備するには、PHP の binding_param メソッドで問題が発生することがよくあります。この記事では、PHP で binding_param ステートメントを動的に生成するプロセスを説明し、既存のソリューションと潜在的な拡張機能の両方を検討します。
提供されるコード スニペットは、型指定子の後にパラメータとして単一の変数が続きます。複数のパラメーターのサポートの欠如を克服するために、call_user_func_array を使用したカスタム ソリューションが試みられました。ただし、PHP バージョンの互換性に関して問題が発生します。
PHP 5.6 では、動的バインディングを簡略化するために利用できるアンパック演算子 (...) が導入されています。次の拡張コードを考えてみましょう。
public function get_custom_result($sql, $types = null, $params = null) { $stmt = $this->mysqli->prepare($sql); $stmt->bind_param($types, ...$params); if (!$stmt->execute()) return false; return $stmt->get_result(); }
アンパック演算子を利用することにより、コードは $params 配列を個々のパラメータに動的にアンパックし、複数の binding_param 呼び出しの必要性を効果的に置き換えます。
拡張されたメソッドは次のように使用できます:
$res = $output->get_custom_result($sql, 'ss', array('1', 'Tk')); while ($row = $res->fetch_assoc()) { echo $row['fieldName'] . '<br>'; }
この例2 つのパラメータ「1」と「Tk」を使用して SQL ステートメントを準備し、クエリを実行します。その後、結果がフェッチされて表示されます。
拡張バインディング アプローチはうまく機能しますが、考慮すべき代替戦略もあります。
以上がPHP で MySQLi の「bind_param」ステートメントを動的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。