2011-01-26 37 views
7

Tôi đang thực hiện truy vấn insert từ tập lệnh trình bao đọc dữ liệu từ nhiều tệp. Một số dữ liệu được chèn chứa ' trong văn bản và MySQL giữ cho lỗiLàm cách nào để chèn một ký tự đặc biệt như 'vào 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 

Đây là văn bản thực tế: Women's Development & Empowerment, Youth Affairs.

+0

chủ đề này có thể giúp bạn: [Thoát MYSQL dòng lệnh thông qua Bash Scripting] (http://stackoverflow.com/questions/4383135/escaping-mysql-command-lines-via-bash-scripting) – jujule

+0

Tốt hơn nếu bạn thoát 'ký tự' hơn \. Bởi vì một số db cũ: sqllite hiển thị lỗi với \ escape character. Bạn có thể viết: "Phát triển & Trao quyền cho Phụ nữ, Thanh niên." – YROjha

Trả lời

14

Bạn cần phải thoát khỏi các báo giá, như vậy:

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

Lưu ý, rằng nếu bạn đang tạo ra các câu lệnh SQL từ một ngôn ngữ như PHP, có chức năng có sẵn để làm điều này cho bạn.

Trong PHP, ví dụ: có mysql_real_escape_string, công cụ này sẽ quản lý nó cho bạn. Lưu ý, các câu lệnh đã được chuẩn bị đó sẽ được ưu tiên hơn, vì khó có thể sai những câu đó.

Xem thêm:

1

Yo cần phải thoát khỏi 'nhân vật với một dấu chéo ngược \

Women \' Thanh niên Xã s Phát triển & Empowerment,

+0

Tôi có khoảng 30k tệp và tôi không muốn sử dụng sed để tìm và thay thế. Tôi muốn xử lý ở cuối mysql nếu có thể. – charan

+0

Bạn sẽ cần sử dụng ngôn ngữ lập trình hoặc tìm và thay thế tệp để thay thế 'bằng \' – sissonb

1

Bạn cần phải thoát khỏi báo giá của bạn. Bạn có thể làm điều này bằng cách tăng gấp đôi nó trong truy vấn chèn của bạn; tức là sử dụng '' thay vì '. Đó là hai dấu nháy đơn chứ không phải là một dấu nháy đơn.

3

Bạn sẽ phải thoát khỏi chuỗi đầu vào trước khi chuyển chúng đến MySql.

Các list of escape character s là:

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

gì là phía máy chủ languge bạn sử dụng?

có nhiều phương pháp mà qua đó bạn có thể thoát chuỗi, tôi sẽ thích điều đó!

Ví dụ: bạn có thể sử dụng mysql_escape_string dữ liệu bạn đang nhập vào truy vấn vì vậy nó sẽ tự động thoát charecters như " ' "

mysql_escape_string là một php function miễn là bạn đang sử dụng php

+0

Tôi đang thử xử lý một số tệp và đẩy một số dữ liệu vào mysql. Tôi đã viết một kịch bản shell nhỏ cho việc này. – charan

Các vấn đề liên quan