1

名前、住所、都市、州、郵便番号の値$ name、$addressなどに挿入したいとします。

mysql_real_escape_string挿入する前に、各変数を実行するにはどうすればよいですか。各変数を正しく書き出す代わりに、foreachまたはloopまたはwhileメソッドが必要ですか?

助けてくれてありがとう。

トム

だから私が持っているなら

 $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

それで?

4

4 に答える 4

2

呼び出しようとしたときにデータベースエラーが発生しました。クエリの実行にmysql_real_escape_string使用しているようです。$dbh->exec()これは、PDOを使用してデータベースに接続することを示唆しているため、のPDO::quote代わりにを使用する必要がありmysql_real_escape_stringます。

さらに、他の人がすでに述べたように、あなたの問題を解決するためのより良い方法は、準備されたステートメントとを使用することPDO::prepareです。

于 2009-08-09T23:04:50.260 に答える
1

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」を何度も入力しないようにする方法。

于 2009-08-09T21:45:37.673 に答える
0

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

array_map()まず、インプレース変換を行わないため、の出力を変数に割り当てる必要があります。次に、それを文字列に内破する必要があります。

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

より大きな問題は、保存したい情報を取得し、保存したい場所に関する知識を使用して正しいSQLステートメントを適切な引用符で囲むデータアクセスレイヤーを使用する代わりに、SQLを手動でアセンブルしていることです。そしてすべて。

ちなみに、これはプリペアドステートメントを使用する提案の背後にある推進力でもありますが、SQLステートメントをまだ組み立てているため、プリペアドステートメントを使用するだけではソリューションの半分にすぎません。

于 2009-08-09T23:11:14.647 に答える
0

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

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

しかし、実際にはmysql拡張機能を使用しないでください。PDOまたはmysqliと、それらの「プリペアドステートメント」のサポートをご覧ください。

于 2009-08-09T22:10:42.177 に答える