質問

名前、住所、都市、州、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」を何度も繰り返し入力しないようにする方法。

これは機能するはずです。

$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);

しかし、あなたは本当にMySQL拡張機能を使用するべきではありません。見て PDO また mysqli そして、「準備された声明」に対する彼らのサポート。

いくつかの問題があります。

まず、の出力を割り当てる必要があることです array_map() 変換は、インプレースコンバージョンを実行しないためです。次に、文字列に戻す必要があります。

 $data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";

大きな問題は、保存したい情報を取得し、正しいSQLステートメントを組み立てるために保存する場所についての知識を使用する代わりに、SQLを手動で組み立てることです。そしてすべて。

これは、偶然にも準備されたステートメントを使用するための提案の背後にある推進力でもありますが、準備されたステートメントを使用するだけで、SQLステートメントを組み立てるため、解決策の半分にすぎません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top