単純なクエリビルダーを作成していますが、2つの質問があります。
それが使用して行われるのと同様のレベルに通常の機能でmysqlクエリを保護することは可能
->execute(array(':param:' => ...
ですか?1つのクエリで多くの変数を使用し、それらに同じ名前(セミコロンの後の名前)を付けてから、それらを1つずつバインドすることは可能ですか?
あなたの理解が正しければbindParam
、標準mysql_*
機能で の機能を再現できるかどうか知りたいですか?
短い答えはノーです。mysql 関数はまったく使用しないでください。mysqli
またはPDO
を使用してください。これは、prepared statements
. また、SQL をデータベース用に事前に最適化できるため、クエリのパフォーマンスが大幅に向上します。
各パラメーターを個別に定義する必要があります (同じ値であっても)。メソッド呼び出しに単純な配列を渡すこともできますがexecute()
、その場合、パラメーターの型を明示的に定義するオプションはありません。
関数内で次のようなものを使用します。
$name = "fred";
$statement = $pdo->prepare("SELECT id FROM contacts WHERE first_name = ? OR last_name = ?");
for ($x = 1; $x <= 2; $x++) {
$statement->bindParam($x, $name, PDO::PARAM_STR);
}
$statement->execute();