Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Sự khác biệt giữa các addlash của PHP và mysql (i) _escape_string là gì?

Trước hết: không sử dụng mysql_escape_string , nó không được dùng nữa (vì một lý do)!

Nếu bạn phải hỗ trợ một ứng dụng kế thừa kết nối với cơ sở dữ liệu thông qua mysql tiện ích mở rộng ( không được dùng nữa ), sử dụng mysql_real_escape_string thay thế. Nếu không thì chuyển đổi ngay lập tức tới mysqli , trong đó các câu lệnh được chuẩn bị sẵn và các tham số liên kết cung cấp một cơ chế mạnh mẽ hơn để thoát đầu vào của người dùng.

Điều đó nói rằng, câu trả lời có thể được tìm thấy bằng cách đọc mô tả của mysql_real_escape_string addslashes :

Sự khác biệt số 1

addslashes không biết bất cứ điều gì về mã hóa kết nối MySql. Nếu bạn chuyển nó một chuỗi chứa các byte đại diện cho một kiểu mã hóa khác với kiểu mã hóa được sử dụng bởi kết nối MySql, thì nó sẽ vui vẻ thoát khỏi tất cả các byte có giá trị của các ký tự ' , " , \\x00 . Điều này có thể không giống với tất cả các ký tự ' , " , \\x00 nếu bạn đang sử dụng mã hóa không phải là mã hóa 8 bit và UTF-8. Kết quả là chuỗi mà MySql nhận được sẽ bị hỏng.

Để kích hoạt lỗi này, hãy thử sử dụng iconv để chuyển đổi biến của bạn thành UTF-16 và sau đó thoát khỏi nó bằng addslashes . Xem những gì cơ sở dữ liệu của bạn nhận được.

Đây là một lý do tại sao addslashes không nên được sử dụng để thoát.

Sự khác biệt # 2

Ngược lại với addslashes , mysql_real_escape_string cũng thoát khỏi các ký tự \r , \n\x1a . Có vẻ như các ký tự này cũng phải được thoát ra khi nói chuyện với MySql, nếu không, một truy vấn không đúng định dạng có thể là kết quả

Đây là lý do khác tại sao addslashes không nên được sử dụng để thoát.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể thả khóa ngoại trong MySQL

  2. django + mysql =Đối tượng 'DatabaseWrapper' không có lỗi thuộc tính 'Cơ sở dữ liệu'

  3. Thời gian tải xuống tệp trong PHP / MySQL

  4. localhost so với 127.0.0.1 trong mysql_connect ()

  5. Thông báo ClusterControl 1.7.5:Bảo trì và hỗ trợ cụm nâng cao cho PostgreSQL 12 và MongoDB 4.2