Ответ 1
Хорошо, исследовал это немного. Если вы можете получить экземпляр DB_Adapter (который, как я полагаю, вызовет ресурс), это не должно быть слишком жестким. Глубоко внутри, Magento основан на Zend Framework, и адаптер DB определенно происходит от Zend_Db_Adapter, поэтому вы можете использовать эти методы бесплатно. См. Ссылку раньше для получения дополнительных примеров, но здесь синтаксис, представленный в документах, который должен автоматически уйти от вашего ввода:
$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);
Снова, см. документы для получения дополнительной информации.
UPDATE:
Я изменил приведенный выше пример. Объект, возвращаемый вашим запросом core_write, является объектом PDO, который предоставляет метод query
(см. Выше), который позволит вам использовать параметризованные запросы. Это BY FAR лучший подход, чем попытка использовать что-то вроде mysql_real_escape_string для дезактивации данных, и я проверил приведенный выше код на предмет правильности. Обратите внимание, что в отличие от большинства запросов с параметрами MySQL, привязка выполняется с помощью: ярлыков, а также для того, что вам не нужны кавычки для ваших варов.
В ответ на ваш другой вопрос и, как отмечено ниже, "правильный" способ сделать это в Magento - это не использовать прямые запросы вообще. Объектные модели Magento хорошо развиты и предназначены для того, чтобы отвлечь вас от этой детали реализации, потому что вам не нужно беспокоиться об этом. Чтобы сделать это "правильно", создайте новую модель на базе базы данных и сохраните головную боль.