Хорошо, немного исследовал это.Если вы можете получить экземпляр 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);
Опять же, смотрите документацию для получения дополнительной информации.* ОБНОВЛЕНИЕ:
Я изменил пример выше.Объект, который вы возвращаете с вашим запросом core_write, является объектом PDO, который предоставляет метод query
(см. Выше), который позволит вам использовать параметризованные запросы.Это на порядок лучше, чем пытаться использовать что-то вроде mysql_real_escape_string для очистки данных, и я проверил приведенный выше код на правильность.Обратите внимание, что, в отличие от большинства параметризованных запросов MySQL, привязка выполняется с метками:, а также что вам не нужны кавычки для ваших переменных.
В ответ на ваш другой пункт и, как отмечено ниже,Правильный "способ сделать это в Magento - это вообще не использовать прямые запросы.Объектные модели Magento хорошо разработаны и предназначены для отвлечения от вас деталей реализации такого рода, потому что вам не нужно беспокоиться об этом.Чтобы сделать это «правильно», создайте новую модель на основе базы данных и сохраните головную боль.