Các tuyên bố đã chuẩn bị rất hữu ích chống lại SQL tiêm. Show
Các câu lệnh được chuẩn bị và các tham số ràng buộcMột câu lệnh đã chuẩn bị là một tính năng được sử dụng để thực hiện các câu lệnh SQL (hoặc tương tự) giống nhau với hiệu quả cao. Các tuyên bố chuẩn bị về cơ bản hoạt động như thế này:
So với việc thực thi các câu lệnh SQL trực tiếp, các câu lệnh được chuẩn bị có ba lợi thế chính:
Các tuyên bố đã chuẩn bị trong mysqliVí dụ sau sử dụng các câu lệnh đã chuẩn bị và tham số ràng buộc trong MySQLI: Ví dụ (mysqli với các câu lệnh đã chuẩn bị)$servername = "localhost"; // Tạo kết nối $ Conn = new mysqli ($ servername, $ username, $ password, $ dbname); // Kiểm tra Connectionif ($ Conn-> Connect_error) {& nbsp; & nbsp; die ("Kết nối không thành công:". $ Conn-> Connect_error); } // Chuẩn bị và ràng buộc $ STMT = $ Conn-> Chuẩn bị ("Chèn vào các giá trị của MyGuests (FirstName, LastName, Email) (?,?,?)"); $ STMT-> BIND_PARAM ("SSS", $ FirstName, $ Tên cuối cùng, $ Email); // Đặt tham số và thực thi $ firstName = "john"; $ lastName = "doe"; $ email = ""; $ stmt-> exec (); $ FirstName = "Mary"; $ lastName = "moe"; $ email = ""; $ stmt-> exec (); $ firstName = "julie"; $ lastName = "dooley"; $ email = ""; $ STMT-> EXECUTE (); echo "các bản ghi mới được tạo thành công"; $ stmt-> đóng (); $ Conn-> đóng ();?> Các dòng mã để giải thích từ ví dụ trên: "Chèn vào các giá trị của MyGuests (FirstName, LastName, Email) (?,?,?)" " Trong SQL của chúng tôi, chúng tôi chèn một dấu hỏi (?) Khi chúng tôi muốn thay thế trong một số nguyên, chuỗi, gấp đôi hoặc giá trị blob. Sau đó, hãy xem hàm Bind_Param (): $ STMT-> BIND_PARAM ("SSS", $ FirstName, $ LastName, $ Email); Hàm này liên kết các tham số với truy vấn SQL và cho biết cơ sở dữ liệu các tham số là gì. Đối số "SSS" liệt kê các loại dữ liệu mà các tham số là. Nhân vật S nói với MySQL rằng tham số là một chuỗi. Đối số có thể là một trong bốn loại:
Chúng ta phải có một trong số này cho mỗi tham số. Bằng cách nói với MySQL loại dữ liệu nào sẽ xảy ra, chúng tôi giảm thiểu nguy cơ tiêm SQL. Lưu ý: Nếu chúng tôi muốn chèn bất kỳ dữ liệu nào từ các nguồn bên ngoài (như đầu vào của người dùng), điều rất quan trọng là dữ liệu được vệ sinh và xác thực. If we want to insert any data from external sources (like user input), it is very important that the data is sanitized and validated. Báo cáo chuẩn bị trong PDOVí dụ sau sử dụng các câu lệnh đã chuẩn bị và tham số ràng buộc trong PDO: Ví dụ (PDO với các câu lệnh đã chuẩn bị)$servername = "localhost"; // Tạo kết nối $ Conn = new mysqli ($ servername, $ username, $ password, $ dbname); // Kiểm tra Connectionif ($ Conn-> Connect_error) {& nbsp; & nbsp; die ("Kết nối không thành công:". $ Conn-> Connect_error); } // Chuẩn bị và ràng buộc $ STMT = $ Conn-> Chuẩn bị ("Chèn vào các giá trị của MyGuests (FirstName, LastName, Email) (?,?,?)"); $ STMT-> BIND_PARAM ("SSS", $ FirstName, $ Tên cuối cùng, $ Email); // Đặt tham số và thực thi $ firstName = "john"; $ lastName = "doe"; $ email = ""; $ stmt-> exec (); $ FirstName = "Mary"; $ lastName = "moe"; $ email = ""; $ stmt-> exec (); $ firstName = "julie"; $ lastName = "dooley"; $ email = ""; $ STMT-> EXECUTE (); Chúng ta có thể sử dụng câu lệnh đã chuẩn bị cho truy vấn chọn không?Để truy xuất dữ liệu từ bảng bằng cách sử dụng câu lệnh CHỌN với các điểm đánh dấu tham số, bạn sử dụng Chuẩn bị..
Có thể tiêm SQL với các tuyên bố đã chuẩn bị?Các câu lệnh được chuẩn bị rất hữu ích đối với tiêm SQL, bởi vì các giá trị tham số, được truyền sau đó bằng cách sử dụng một giao thức khác, không cần phải thoát ra chính xác. Nếu mẫu câu lệnh gốc không có nguồn gốc từ đầu vào bên ngoài, thì SQL tiêm không thể xảy ra., because parameter values, which are transmitted later using a different protocol, need not be correctly escaped. If the original statement template is not derived from external input, SQL injection cannot occur.
Việc sử dụng câu lệnh đã chuẩn bị trong PHP là gì?Một tuyên bố đã chuẩn bị hoặc một câu lệnh tham số hóa được sử dụng để thực hiện cùng một tuyên bố nhiều lần với hiệu quả cao và bảo vệ chống tiêm SQL.Việc thực hiện tuyên bố đã chuẩn bị bao gồm hai giai đoạn: chuẩn bị và thực thi.Ở giai đoạn chuẩn bị, một mẫu câu lệnh được gửi đến máy chủ cơ sở dữ liệu.
Nơi chúng ta có thể sử dụng tuyên bố đã chuẩn bị?Mặc dù bạn có thể sử dụng các đối tượng PreadStatement cho các câu lệnh SQL không có tham số, nhưng bạn có thể sử dụng chúng thường xuyên nhất cho các câu lệnh SQL lấy tham số.Ưu điểm của việc sử dụng các câu lệnh SQL lấy tham số là bạn có thể sử dụng cùng một câu lệnh và cung cấp cho nó các giá trị khác nhau mỗi khi bạn thực hiện nó.SQL statements that take parameters. The advantage of using SQL statements that take parameters is that you can use the same statement and supply it with different values each time you execute it. |