2011-01-26 19 views
7

Sto eseguendo la query insert da uno script di shell che legge i dati da più file. Alcuni dei dati da inserire contiene ' nel testo e MySQL continua a dare erroriCome inserire un carattere speciale come 'in MySQL?

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Development & Empowerment, Youth Affairs     
',' 
Himachal Pradesh     ' at line 1 

Questo è il testo vero e proprio: Women's Development & Empowerment, Youth Affairs.

+0

questa discussione può aiutare: [MYSQL Escaping righe di comando tramite Bash Scripting] (http://stackoverflow.com/questions/4383135/escaping-mysql-command-lines-via-bash-scripting) – jujule

+0

E 'meglio se sfugga' carattere con 'che \. È perché alcuni db ex: sqllite mostrano un errore con il carattere \ escape. Puoi scrivere: "Sviluppo e responsabilizzazione delle donne, affari giovanili". – YROjha

risposta

14

avete bisogno di sfuggire la citazione, in questo modo:

'Women\'s Development & Empowerment, Youth Affairs' 

nota, che se si sta generando l'istruzione SQL da un linguaggio come PHP, ci sono funzioni disponibili a fare questo per voi.

In PHP, ad esempio, c'è mysql_real_escape_string, che si prende cura di esso per voi. Si noti che le dichiarazioni preparate devono essere preferite su questo, poiché è più difficile sbagliare.

Consulta anche:

1

Yo bisogno di sfuggire al 'carattere con un backslash \

Donne \' s Development & responsabilizzazione, affari della gioventù

+0

Ho circa 30k file e non voglio usare sed per fare una ricerca e sostituzione. Mi piacerebbe piuttosto gestire a mysql end se è possibile. – charan

+0

Avrete bisogno di usare un linguaggio di programmazione o fare un find e sostituirlo sul file per sostituire 'with \' – sissonb

1

Hai bisogno di sfuggire alla tua citazione. Puoi farlo raddoppiandolo nella tua query di inserimento; ad esempio '' piuttosto che '. Quelle sono due virgolette singole piuttosto che una singola virgoletta doppia.

3

Dovrai sfuggire alle stringhe di input prima di passarle a MySql.

I list of escape character s è:

Character Escape Sequence 
\0 An ASCII NUL (0x00) character. 
\' A single quote (“'”) character. 
\" A double quote (“"”) character. 
\b A backspace character. 
\n A newline (linefeed) character. 
\r A carriage return character. 
\t A tab character. 
\Z ASCII 26 (Control-Z). See note following the table. 
\\ A backslash (“\”) character. 
\% A “%” character. See note following the table. 
\_ A “_” character. See note following the table. 
0

Qual è il lato server languge stai usando?

ci sono molti metodi attraverso i quali è possibile sfuggire alla stringa, preferisco quella!

Ad esempio: è possibile utilizzare mysql_escape_string i dati che si sta inserendo nella query in modo che sfuggirà automaticamente charecters come " ' "

mysql_escape_string è un php function a condizione che si sta utilizzando php

+0

Sto provando a processare alcuni file e spingere alcuni dati in mysql. Ho scritto un piccolo script di shell per questo. – charan

Problemi correlati