Я пытаюсь вставить некоторые данные в базу данных, но что-то здесь не так. Не могу понять, что это такое, и я надеюсь, что кто-то сможет сказать мне, что происходит с этим.
Моя таблица выглядит примерно так:
CREATE TABLE IF NOT EXISTS `db_name`.`order` (
`orderID` INT NOT NULL AUTO_INCREMENT,
`order_ordernumber` VARCHAR(200) NOT NULL,
`order_orderweight` INT NOT NULL,
... And other columns as well, but all NULL
ENGINE = InnoDB
Я использую Symfony2-framework и это DBAL-insert здесь:
$conn->insert('order', array(
'order_ordernumber' => $this->orderid,
'order_orderweight' => $this->totalweight
));
«$ this-> orderid» является строковой переменной, а «$ this-> totalweight» является int.
И это дает это сообщение об ошибке:
An exception occurred while executing 'INSERT INTO order (order_ordernumber, order_orderweight) VALUES (?, ?)' with params ["000001", 900]:
SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order (order_ordernumber, order_orderweight) VALUES ('000001', '900')' at line 1
500 Internal Server Error - DBALException
1 linked Exception: PDOException »
Я могу сделать тот же запрос на чистом SQL, и он работает, этот не делает. Что на земле происходит с этим?
order
является зарезервированным ключевым словом в MySQL: http://dev.mysql.com/doc/refman/5.6/en/reserved-words.html
Вы должны использовать обратные кавычки вокруг слова, чтобы предотвратить эту ошибку. Но лучшей рекомендацией будет префикс вашей таблицы.
Других решений пока нет …