2011-01-26 28 views
7

Wykonuję kwerendę insert ze skryptu powłoki, który odczytuje dane z wielu plików. Niektóre dane do wstawienia zawiera ' w tekście i MySQL utrzymuje dając błędyJak wstawić znak specjalny, taki jak "do 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 

To jest rzeczywisty tekst: Women's Development & Empowerment, Youth Affairs.

+0

ten wątek może pomóc: [Uciekając MYSQL wiersze poleceń za pośrednictwem skryptów Bash] (http://stackoverflow.com/questions/4383135/escaping-mysql-command-lines-via-bash-scripting) – jujule

+0

Lepiej jest, jeśli uciekniesz z "znaku z" niż \. To dlatego, że niektóre db ex: sqllite pokazują błąd z \ escape character. Możesz napisać: "Rozwój i inicjacja kobiet, sprawy młodzieży". – YROjha

Odpowiedz

14

Musisz uciec cytat, tak:

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

uwaga, że ​​jeśli jesteś generowania SQL z języka takich jak PHP, istnieją funkcje dostępne to zrobić dla ciebie.

Na przykład w PHP jest mysql_real_escape_string, która zajmuje się tym za Ciebie. Zauważ, że przygotowane oświadczenia mają być preferowane, ponieważ trudniej jest je złapać.

Zobacz także:

1

Yo trzeba uciec 'postać z backslash \

Women \' s Rozwoju & Empowerment, Spraw Młodzieży

+0

Mam około 30 000 plików i nie chcę używać sed, aby znaleźć i wymienić. Wolałbym obsługiwać na końcu mysql, jeśli jest to możliwe. – charan

+0

Będziesz musiał użyć języka programowania lub znaleźć i zastąpić plik, aby zastąpić "z \" – sissonb

1

Musisz uciec z twojego cytatu. Możesz to zrobić, podwajając go w kwerendzie wstawiania; tj. użyj "" zamiast ". To dwa pojedyncze cytaty, a nie pojedynczy podwójny cudzysłów.

3

Będziesz musiał uciec przed ciągami wejściowymi przed przekazaniem ich do MySql.

W list of escape character s wynosi:

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

Co jest languge stronie serwera używasz?

Istnieje wiele metod, dzięki którym można uciec ciągowi, wolę to!

Np można użyć mysql_escape_string dane wprowadzasz w zapytaniu więc będzie automatycznie uciec charecters jak " ' "

mysql_escape_string jest php function warunkiem używasz php

+0

Próbuję przetworzyć niektóre pliki i przesłać niektóre dane do mysql. Napisałem do tego mały skrypt powłoki. – charan

Powiązane problemy