2010-04-06 29 views
13

Qualcuno può dirmi come inserire caratteri speciali in un database MySQL? Ho creato uno script PHP che ha lo scopo di inserire alcune parole in un database, anche se se la parola contiene un ', allora non verrà inserito.Come inserire caratteri speciali in un database?

Posso inserire i caratteri speciali bene quando si utilizza PHPmyAdmin, ma semplicemente non funziona inserendoli tramite PHP. Potrebbe essere che PHP sta cambiando i caratteri speciali in qualcos'altro? Se è così, c'è un modo per farli inserire correttamente?

+0

u può semplicemente incollare la porzione di codice in cui la variabile paarticular viene elaborato ed inserito? –

risposta

24
$insert_data = mysql_real_escape_string($input_data); 

Supponendo che hai i dati memorizzati come $input_data

+0

Questo mi insegnerà a non scrivere un semplice esempio di una riga. – zaf

+0

Lo so! Ho quasi cancellato la mia risposta quando ti ho visto battermi. – Anthony

+0

perfetto ... ho salvato la mia giornata anche ora. Grazie! –

9

Stai scappando? Prova la funzione mysql_real_escape_string() e gestirà i caratteri speciali.

+0

+1 per avermi picchiato. Ho scoperto che ottengo più voti quando uso il backtick per formattare il mio codice inline, se questo aiuta. – Anthony

+1

Sympathy upvote da quando hai risposto per primo ma non hai dato un esempio. Come se si trattasse di una domanda a cui non è stato possibile rispondere più velocemente usando PHP.net – dscher

+0

@dscher Grazie! Se ci fossero solo più persone come te! ;) – zaf

2

Probabilmente "mysql_real_escape_string()" lavorerà per u

4

si hanno più probabilità sfuggire alla stringa SQL, simile a:

SELECT * FROM `table` WHERE `column` = 'Here's a syntax error!' 

È necessario evitare le citazioni, come segue:

SELECT * FROM `table` WHERE `column` = 'Here\'s a syntax error!' 

mysql_real_escape_string() gestisce questo per voi.

6

uso mysql_real_escape_string

Così che cosa mysql_real_escape_string fare?

Questa funzione della libreria PHP antepone i backslash ai seguenti caratteri: \ n, \ r, \, \ x00, \ x1a, 'e ". La parte importante è che le virgolette singole e doppie sono sfuggite, perché questi sono i caratteri che più probabilmente aprono vulnerabilità.

Si prega di informarsi su sql_injection. È possibile utilizzare questo link come inizio

+1

Ancora un altro stupido articolo il cui autore non ha idea. La stessa vecchia storia sui drop tables (buoni per spaventare i principianti, sì, ma non funzionano mai), la stessa stupida funzione di Query che si occupa delle citazioni magiche. E non una parola sui valori non stringa, come al solito. e la più grande protaction di $ badWords mai –

+0

ok, non è l'articolo migliore, ma dovrebbe familiarizzare con le basi (l'ho estratto da una ricerca google veloce) Puoi dare un link ad un articolo migliore se lo hai. –

+0

Beh, ho scritto alcuni, è la forma di risposta SO. http://stackoverflow.com/questions/2589820/is-it-necessario-da-utilizzare-mysql-real-escape-string-when-magic-quotes-gpc-is-on –

3

Nota che, come altri hanno fatto notare mysql_real_escape_string() risolverà il problema (come sarà addslashes), tuttavia è necessario utilizzare sempre mysql_real_escape_string() per motivi di sicurezza - prendere in considerazione:

SELECT * FROM valid_users WHERE username='$user' AND password='$password' 

E se la browser invia

user="admin' OR (user=''" 
password="') AND ''='" 

La query diventa:

SELECT * FROM valid_users 
WHERE username='admin' OR (user='' AND password='') AND ''='' 

ovvero i controlli di sicurezza sono completamente bypassati.

C.

0
$var = mysql_real_escape_string("data & the base"); 
$result = mysql_query('SELECT * FROM php_bugs WHERE php_bugs_category like "%' .$var.'%"'); 
+0

Questo è un esempio pratico per gestire il caratteri speciali in php mysql.si può sostituire & con 'funzionerà bene –

+0

puoi modificare la tua risposta e aggiungere il commento chiarificatore :-) – kleopatra

0

Utilizzare questa: htmlentities($_POST['field']);

soltanto abbastanza. Questo per carattere speciale:

Uso per CI htmlentities($this->input->post('control_name'));

Problemi correlati