MySQL Real Escape String Loop Mehrere Variablen
-
12-09-2019 - |
Frage
Sagen Sie, ich möchte in Name, Adresse, Stadt, Bundesstaat, Zip -Werte $ name, $ adresse usw. einfügen .....
Wie kann ich rennen? mysql_real_escape_string
auf jedem der Variablen vor dem Einfügen. Es muss eine Foreach oder Schleife geben oder während der Methode, anstatt jede Variable zu schreiben, oder?
Danke für die Hilfe.
Tom
Also wenn ich habe
$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);
und
$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");
Ich bekomme eine Menge Fehler.
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
was jetzt?
Lösung
Ein Datenbankfehler ist beim Versuch aufgetreten, aufzurufen mysql_real_escape_string
und ich sehe, dass du benutzt $dbh->exec()
Um die Abfrage auszuführen. Dies deutet darauf hin, dass Sie eine Verbindung zur Datenbank mit PDO herstellen, also sollten Sie lieber verwenden PDO::quote
Anstatt von mysql_real_escape_string
.
Darüber hinaus wäre, wie andere bereits erwähnt haben, ein besserer Weg, um Ihr Problem zu lösen, darin, vorbereitete Aussagen zu verwenden und PDO::prepare
.
Andere Tipps
Sie verwenden Sprintf.
Zum Beispiel
$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) );
Oder ist das nicht genau das, wonach Sie gesucht haben; Eine Möglichkeit, immer wieder "mysqli_escape_string" zu tippen.
Sie haben mehrere Probleme.
Erstens müssen Sie die Ausgabe von zuweisen array_map()
zu einer Variablen, da sie keine Umwandlung in der Stelle ausführt. Dann müssen Sie es wieder in eine Zeichenfolge implodieren.
$data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";
Das größere Problem besteht darin, dass Sie SQL von Hand zusammenstellen, anstatt eine Datenzugriffsschicht zu verwenden, die die Informationen, die Sie speichern möchten, ihr Wissen darüber, wo Sie sie speichern möchten, aufnehmen möchten, um eine korrekte SQL -Anweisung zusammenzustellen, mit ordnungsgemäßem Zitat und alles.
Dies ist auch der Anstoß hinter den Vorschlägen zur Verwendung vorbereiteter Aussagen, aber nur die Verwendung vorbereiteter Aussagen ist nur die Hälfte der Lösung, da Sie immer noch SQL -Anweisungen zusammenstellen würden.