Câu trả lời:
Không, bạn không nên chuẩn bị hoặc thoát dữ liệu, lớp này được thực hiện cho bạn wpdb
.
Từ tham chiếu lớp wpdb :
dữ liệu :
(mảng) Dữ liệu cần chèn (trong cột => cặp giá trị). Cả cột dữ liệu $ và giá trị dữ liệu $ phải là "thô" (không nên thoát SQL).
Tuy nhiên, nếu bạn đang viết SQL của riêng bạn thay vì sử dụng insert
phương thức, thì có, bạn nên thoát bằng cách sử dụng prepare
.
Sau đây là một cảnh báo cho lớp wpdb.
https://codex.wordpress.org/Class_Reference/wpdb
Một lời cảnh báo
Một số hàm trong lớp này lấy câu lệnh SQL làm đầu vào. Bạn phải SQL thoát tất cả các giá trị không đáng tin cậy mà bạn kết hợp vào truy vấn SQL để ngăn chặn các cuộc tấn công tiêm nhiễm SQL. Kiểm tra tài liệu để xem liệu chức năng bạn dự định sử dụng thoát SQL cho bạn hay dự kiến nó sẽ được thoát trước.
Vì vậy, tôi đọc nó như là - lớp wpdb không tự động chuẩn bị hoặc thoát dữ liệu cho bạn.
Tôi khá chắc chắn rằng nếu bạn không thể tin tưởng 100% nguồn dữ liệu trong mã của mình, thì tôi khuyên bạn nên sử dụng lớp chuẩn bị (?).
Đừng nghĩ rằng sử dụng lớp chuẩn bị sẽ sửa nó mà không sử dụng lớp chuẩn bị đúng cách. Tôi khá mới với điều này vì vậy xin vui lòng gửi bất kỳ sửa chữa như là một trả lời nếu tôi không đúng.
$ wpdb-> chuẩn bị ("CHỌN * TỪ bảng WHERE ID =% d AND name =% s", $ id, $ name);
Trong tuyên bố trên, có 2 thuộc tính bổ sung. Một cho ID và một cho tên. Theo như tôi đọc, mỗi mục tương ứng với số lượng mục trong truy vấn của bạn. Ngoài ra% s = chuỗi,% d = số nguyên và% f = float.
Ngoài ra, từ cách đọc của tôi, nếu bạn không đặt các thuộc tính bổ sung vào, thì việc chuẩn bị sẽ thực sự không làm gì cả. Sẽ có một cảnh báo, nhưng nếu bạn tắt nó đi, có lẽ bạn sẽ không biết.
Dưới đây là một ví dụ từ chính tham chiếu lớp nơi họ thêm một lớp chuẩn bị vào một INSERT bên dưới.
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_Query_Injection_Attacks
$ wpdb-> truy vấn ($ wpdb-> chuẩn bị ("INSERT INTO $ wpdb-> postmeta (post_id, meta_key, meta_value) VALUES (% d,% s,% s)", mảng (10, $ metakey, $ metavalue) ));
Mối quan tâm của tôi là câu trả lời nâng cao là không chính xác theo cùng một trang mà 'không ai' tham khảo. Tôi giả sử rằng bạn sử dụng chuẩn bị () chứ không phải các phương thức thoát php tiêu chuẩn khác vì tôi cũng đã trả lời đúng như vậy ... cho đến khi tôi đào sâu hơn.
Dù sao ... có lẽ mọi thứ đã thay đổi kể từ câu trả lời ban đầu.
$wpdb->insert()
, $ wpdb-> update () `hoặc $wpdb->delete()
dữ liệu phải là RAW. Trong tình huống bạn sử dụng ví dụ $wpdb->query()
và chuyển câu lệnh SQL làm đầu vào, bạn nên thoát dữ liệu không đáng tin cậy.
Không, bạn không cần phải ngăn chặn việc tiêm SQL khi bạn sử dụng - wpdb insert hoặc wpdb xóa.
Xem các liên kết sau:
https://codex.wordpress.org/Data_Validation#Database
https://codex.wordpress.org/Class_Reference/wpdb#Protect_Queries_Against_Query_Injection_Attacks
insert
&update
không cần điều đó. Nhưng nó nên được sử dụng vớiquery
.