Tôi đang sử dụng codeigniter. Tôi muốn sử dụng chuỗi trong $_POST
giá trị từ mẫu tìm kiếm có thể chứa các ký tự đặc biệt như apostrophe ['], [;]. $_POST['search']
giá trị vào cơ sở dữ liệu?
Bất cứ khi nào tôi sử dụng hàm mysql_real_escape_string []. Nó cho tôi: mysql_real_escape_string[]: Access denied error.
Mã của tôi trông như thế này:
$query = "SELECT * FROM products WHERE
product_name='".mysql_real_escape_string[$_POST['search']]."'";
$this->db->query[$query];
Làm thế nào có thể giải quyết vấn đề này trong Codeigniter? Cảm ơn
Tom
2.9791 Huy hiệu vàng18 Huy hiệu bạc23 Huy hiệu đồng1 gold badge18 silver badges23 bronze badges
Hỏi ngày 28 tháng 9 năm 2012 lúc 10:36Sep 28, 2012 at 10:36
1
Không bao giờ sử dụng đầu vào người dùng trực tiếp vào các truy vấn của bạn. Đọc thêm về "SQL Injection" và "XSS". Đối với Codeignitor, hãy làm điều này:
Không sử dụng $ _POST, sử dụng lớp đầu vào thay thế.
$this->input->post
Sử dụng ràng buộc truy vấn, mysql_real_escape_string là không cần thiết. ví dụ.
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; $this->db->query[$sql, array[3, 'live', 'Rick']];
Đã trả lời ngày 28 tháng 9 năm 2012 lúc 10:39Sep 28, 2012 at 10:39
DhruvpathakdhruvpathakDhruvPathak
41.3K15 Huy hiệu vàng115 Huy hiệu bạc173 Huy hiệu đồng15 gold badges115 silver badges173 bronze badges
Cách tốt nhất để làm điều đó sẽ là:
$query = "SELECT * FROM products WHERE product_name=?";
$this->db->query[$query, array[$this->input->post['search']];
Hãy xem các tài liệu ở đây: //codeigniter.com/user_guide/database/queries.html
Nếu bạn thực sự muốn làm điều đó với việc trốn thoát, hãy nhìn vào các truy vấn trốn thoát. Nhưng sẽ tốt hơn nếu làm điều đó với ràng buộc [như ví dụ của tôi ở trên]
Đã trả lời ngày 28 tháng 9 năm 2012 lúc 10:41Sep 28, 2012 at 10:41
Manavomanavomanavo
1.8192 huy hiệu vàng14 Huy hiệu bạc16 Huy hiệu đồng2 gold badges14 silver badges16 bronze badges
Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không? |
. Sản xuất Chọn * từ thử nghiệm trong đó "1" = '1' Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không? Tyrael
.
. Tyrael
. Sản xuất Chọn * từ thử nghiệm trong đó "1" = '1' Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không?
. Sản xuất Chọn * từ thử nghiệm trong đó "1" = '1' Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không? . Một Lỗi PHP đã gặp phải Mức độ nghiêm trọng: Cảnh báo Như mong đợi ... bạn có thể sao chép cảnh báo bạn đang nhận được không? . Một Lỗi PHP đã gặp phải Mức độ nghiêm trọng: Cảnh báo Tin nhắn: mysql_escape_string [] [function.mysql-real-escape-chuỗi]: hàm này không được dùng nữa; sử dụng mysql_real_escape_string [] thay thế. Tên tệp: mysqli/mysqli_driver.php Số dòng: 258 Một lỗi PHP đã gặp phải Tyrael
[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string Code:
Tôi đang hiểu nó ổn ... nhưng có lẽ là một @ trước khi gọi chức năng sẽ không làm tổn thương ai ... Tôi có thể biết phiên bản PHP của bạn không?
[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string Tyrael
[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string
[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string Tyrael
[eluser] seppo [/eluser] Tôi thực sự có chức năng mysqli_real_escape_string Code:
0 1 2
|