Tôi có một số mã sử dụng truy vấn được tham số hóa để ngăn chặn việc tiêm, nhưng tôi cũng cần có khả năng tự động xây dựng truy vấn bất kể cấu trúc của bảng. Cách thích hợp để làm điều này là gì?Các cột SQL được tham số hóa?
Dưới đây là một ví dụ, giả sử tôi có một bảng có cột Tên, Địa chỉ, Điện thoại. Tôi có một trang web nơi tôi chạy Hiển thị các cột và điền một menu thả xuống chọn với các tùy chọn đó.
Tiếp theo, tôi có một hộp văn bản được gọi là Tìm kiếm. Hộp văn bản này được sử dụng làm tham số.
Hiện nay mã của tôi trông giống như sau:
result = pquery('SELECT * FROM contacts WHERE `' + escape(column) + '`=?', search);
tôi nhận được một cảm giác mảng nhầy khỏi nó mặc dù. Lý do tôi đang sử dụng truy vấn được tham số hóa là tránh sử dụng escape. Ngoài ra, escape có thể không được thiết kế để thoát tên cột.
Làm cách nào để đảm bảo cách này hoạt động theo cách tôi dự định?
Chỉnh sửa: Lý do tôi yêu cầu truy vấn động là lược đồ có thể định cấu hình người dùng và tôi sẽ không sửa chữa bất kỳ thứ gì được mã hóa cứng.
Mã hóa cứng không phải là một lựa chọn cho tôi, cảm ơn bạn đã đề xuất! – Martin
Điểm của tôi không phải là mã hóa các tên cột mà không phải để chuyển chúng từ giao diện. Bạn có thể nhận danh sách các cột động và vẫn sử dụng cùng một giải pháp ở trên. Chỉ cần không làm cho phần tên cột của dữ liệu được truyền đi - điều đó sẽ bảo vệ bạn khỏi bất kỳ sự tiêm SQL nào. – zigdon
+1 Có, tôi muốn nói: cho phép người dùng nhập dữ liệu, nhưng không cho phép người dùng cung cấp mã. –