Được rồi, nghiên cứu vấn đề này một chút. Nếu bạn có thể nhận được một thể hiện của một DB_Adapter (mà tôi tin rằng cuộc gọi tài nguyên sẽ trở lại), điều này không nên quá khó khăn. Sâu bên trong, Magento dựa trên khung công tác Zend và bộ điều hợp DB đặc biệt là hậu duệ của Zend_Db_Adapter, vì vậy bạn có thể sử dụng những phương pháp đó miễn phí. Xem các liên kết trước khi để biết thêm ví dụ, nhưng đây là cú pháp được cung cấp trong tài liệu, mà nên thoát đầu vào của bạn automagically:
$write = Mage::getSingleton("core/resource")->getConnection("core_write");
// Concatenated with . for readability
$query = "insert into mage_example "
. "(name, email, company, description, status, date) values "
. "(:name, :email, :company, :desc, 0, NOW())";
$binds = array(
'name' => "name' or 1=1",
'email' => "email",
'company' => "company",
'desc' => "desc",
);
$write->query($query, $binds);
Một lần nữa, xem tài liệu cho biết thêm thông tin.
UPDATE:
Tôi đã thay đổi ví dụ trên. Đối tượng mà bạn lấy lại với yêu cầu core_write của bạn là một đối tượng PDO cho thấy phương thức query
(xem ở trên) sẽ cho phép bạn sử dụng các truy vấn được tham số hóa. Đây là BY FAR một cách tiếp cận tốt hơn so với cố gắng sử dụng một cái gì đó như mysql_real_escape_string cho vệ sinh dữ liệu, và tôi đã kiểm tra mã trên cho đúng đắn. Lưu ý rằng, trái ngược với hầu hết các truy vấn được tham số hóa MySQL, ràng buộc được thực hiện với: nhãn, và cũng là bạn không cần trích dẫn cho các vars của bạn.
Để trả lời cho điểm khác của bạn và như được lưu ý bên dưới, cách "đúng" để thực hiện trong Magento không phải là sử dụng truy vấn trực tiếp. Các mô hình đối tượng Magento đang phát triển tốt và có nghĩa là trừu tượng hóa loại chi tiết triển khai này khỏi bạn, bởi vì bạn không cần phải quan tâm đến chính mình với nó. Để làm điều đó "chính xác", hãy tạo một mô hình dựa trên cơ sở dữ liệu mới và lưu các nhức đầu.
$ write-> quote ($ string); – ppostma1