2010-09-08 36 views
48

Vì vậy, đây là điều mà tất cả chúng ta nên biết về và chơi trên tâm trí của tôi khi tôi lần đầu tiên nhìn thấy nó ..mysql_escape_string VS mysql_real_escape_string

Tôi biết rằng mysql_escape_string bị phản đối từ 5.3 nhưng sự khác biệt thực tế trong mysql_real_escape_string là gì.

Điều tôi nghĩ là mysql_real_escape_string giống hệt như mysql_escape_string ngoài số mysql_real_escape_string lấy đối số thứ hai cho tài nguyên mysql.

vì vậy sau đó tôi nghĩ tốt chắc chắn phải có một số khác biệt về cách chuỗi được xử lý bởi vì sẽ không có nhu cầu cho 2 chức năng.

Vì vậy, sau đó tôi nghĩ rằng sự khác biệt là hoàn toàn xuống đến ngôn ngữ và mã hóa ký tự. ?

có ai có thể xóa điều này cho tôi không?

Trả lời

85

Sự khác biệt là mysql_escape_string chỉ xử lý chuỗi dưới dạng byte thô và thêm lối thoát khi nó cho là phù hợp.

mysql_real_escape_string, mặt khác, sử dụng thông tin về bộ ký tự được sử dụng cho kết nối MySQL. Điều này có nghĩa là chuỗi được thoát trong khi xử lý các ký tự nhiều byte một cách chính xác; nghĩa là, nó sẽ không chèn các ký tự thoát ra ở giữa ký tự. Đây là lý do tại sao bạn cần kết nối cho mysql_real_escape_string; nó là cần thiết để biết làm thế nào chuỗi nên được điều trị.

Tuy nhiên, thay vì thoát, bạn nên sử dụng các truy vấn được tham số hóa từ thư viện MySQLi; trước đây đã có lỗi trong thói quen thoát, và có thể một số có thể xuất hiện trở lại. Tham số hóa truy vấn là nhiều, khó khăn hơn nhiều để gây rối, vì vậy ít có khả năng bạn có thể bị xâm phạm bởi một lỗi MySQL.

+6

1 đề cập đến chuẩn bị phát biểu – Jacco

+0

tôi sử dụng PDO, đây chỉ là một cái gì đó mà tôi cần biết cho các mục đích giáo dục. – RobertPitt

+0

Ngoài ra còn có một mysqli_escape_string(). Cũng làm điều tương tự như mysql_escape_string ?? nếu mysql_escape_string không được chấp nhận tại sao có chức năng này và cũng có trong mysqli ??? – Lykos

2

Vâng ... loại, vâng. Nó lấy bộ ký tự của kết nối MySQL vào tài khoản.

http://php.net/mysql_escape_string

chức năng này giống hệt với mysql_real_escape_string() trừ mysql_real_escape_string() mà phải mất một xử lý kết nối và thoát chuỗi theo bộ ký tự hiện hành. mysql_escape_string() không tham số kết nối và không tôn trọng cài đặt bộ ký tự hiện tại.

3

mysql_escape_string không được dùng nữa từ 5.3 nhưng, đối với 4.3.0 trở lên. Vì vậy, bất kỳ Một sử dụng phiên bản PHP ở trên/hoặc 4.3.0 nên sử dụng mysql_real_escape_string.

nếu sử dụng php < 4.3.0, hơn làm magic_quotes_gpc active từ bạn php.ini, mặc dù nó được khuyến khích để cập nhật, nhưng nếu mã của bạn sẽ có vấn đề hơn chắc chắn rằng bạn sử dụng, magic_quotes_gpcaddslash chức năng chứ không phải là mysql_escape_string.

1

bây giờ cả hai của các chức năng này không được tán thành trong

PHP 4> = 4.3.0 và PHP 5. Họ khuyên bạn sử dụng phần mở rộng PDO_MySQL

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