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?

È stato utile?

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.

Questo dovrebbe funzionare.

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

Ma davvero non dovrebbe più usare l'estensione mysql. Dai un'occhiata alla DOP o mysqli e il loro sostegno per "istruzioni preparate".

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top