Mysql vera e propria fuga di loop stringa di variabili multiple
-
12-09-2019 - |
Domanda
dire che voglio inserire nel nome, indirizzo, città, stato, valori di avviamento postale $ nome, $ indirizzo Etc .....
Come posso eseguire mysql_real_escape_string
su ciascuna delle variabili prima di inserire. Ci ha avuto modo di essere un foreach o loop o mentre il metodo invece di scrivere fuori ogni destra variabile?
Grazie per l'aiuto.
Tom
Quindi, se ho
$data = array($address, $city, $name);
array_map('mysql_real_escape_string', $data);
e
$columns = "name, address, city, state, zip";
$count = $dbh->exec("INSERT INTO customer($columns) VALUES ($data)");
ho un sacco di errori.
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
Ora che cosa?
Soluzione
Si è verificato un errore di database quando provo a invocare mysql_real_escape_string
e vedo che si sta utilizzando $dbh->exec()
per eseguire la query. Questo suggerisce che ci si connette al database con PDO, così si dovrebbe invece usare PDO::quote
al posto di mysql_real_escape_string
.
Inoltre, come altri hanno già detto, un modo migliore per risolvere il problema sarebbe quella di utilizzare istruzioni preparate e PDO::prepare
.
Altri suggerimenti
Si utilizza sprintf.
Ad esempio
$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) );
o è che non è esattamente quello che stavi cercando; un modo per evitare di scrivere "mysqli_escape_string" più e più volte.
Hai diversi problemi.
Per prima cosa è che è necessario assegnare l'uscita di array_map()
a una variabile, in quanto non fa la conversione sul posto. Allora avete bisogno di implodere di nuovo a una stringa.
$data = "'".implode("', '", array_map('mysql_real_escape_string', $data))."'";
Il problema più grande è che siete mano assemblando SQL invece di utilizzare uno strato di accesso ai dati, che avrebbe preso le informazioni hai intenzione di salvare e utilizzare la sua conoscenza su cui si desidera conservarlo assemblare un'istruzione SQL corretta, con citazione corretta e tutto.
Questa è anche l'impeto dietro suggerimenti per utilizzare istruzioni preparate, per inciso, ma usando solo le istruzioni preparate è solo metà della soluzione, perché si sarebbe ancora assemblando istruzioni SQL.