MySQL REAL ESACE STRING LOOP複数の変数
-
12-09-2019 - |
質問
名前、住所、都市、州、zip値$ name、$ addressなどに挿入したいとします.....
どうすれば実行できますか mysql_real_escape_string
挿入前の各変数について。各変数を正しく書き出す代わりに、foreachまたはループ、またはメソッドが必要ですか?
助けてくれてありがとう。
トム
だから私が持っているなら
$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);
と
$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");
たくさんのエラーが発生します。
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO) in /Users/tommyscott45/Sites/experiment/result.php on line 23
それで?
解決
呼び出そうとすると、データベースエラーが発生しました mysql_real_escape_string
そして、私はあなたが使用していることがわかります $dbh->exec()
クエリを実行します。これは、PDOでデータベースに接続することを示唆しているため、むしろ使用する必要があります PDO::quote
それ以外の mysql_real_escape_string
.
さらに、他の人がすでに述べたように、あなたの問題を解決するためのより良い方法は、準備されたステートメントを使用することです PDO::prepare
.
他のヒント
Sprintfを使用します。
例えば
$query = sprintf("INSERT into
TABLE name = '%s', address = '%s', city = '%s'",
mysqli_escape_string($link, $name),
mysqli_escape_string($link, $address),
mysqli_escape_string($link, $city) );
それとも、あなたが探していたものではありません。 「mysqli_escape_string」を何度も繰り返し入力しないようにする方法。
いくつかの問題があります。
まず、の出力を割り当てる必要があることです array_map()
変換は、インプレースコンバージョンを実行しないためです。次に、文字列に戻す必要があります。
$data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";
大きな問題は、保存したい情報を取得し、正しいSQLステートメントを組み立てるために保存する場所についての知識を使用する代わりに、SQLを手動で組み立てることです。そしてすべて。
これは、偶然にも準備されたステートメントを使用するための提案の背後にある推進力でもありますが、準備されたステートメントを使用するだけで、SQLステートメントを組み立てるため、解決策の半分にすぎません。