Intereting Posts
Параметр fgetcsv / fputcsv $ escape полностью нарушен Проверка переключателей в php PHP Magic Quotes добавляет косые черты в файл шаблона? Как динамически генерировать SQL-запрос на основе пользовательских настроек? Проверка правильности JavaScript и PHP «Неустранимая ошибка: вызов неопределенного метода PHPUnit_Util_Filter :: addfiletofilter () в / usr / bin / phpunit в строке 48» php mail bcc несколько получателей Перепишите все запросы на PHP-скрипт на Nginx Пытается использовать PHP DateTime Class с Yii2, получившим класс не найденных ошибок Клавиши сортировки массива PHP Как несериализировать PHP Serialized array / variable / class и возвращать подходящий объект в C # Иностранные языки POSTGRES Каков наилучший способ вставить только месяц, день и время в таблицу базы данных? Почему мой сценарий резервного копирования базы данных не работает в php? Обновление и отображение самой последней записи (в БД) после того, как AJAX обновляет значение через PHP

Magento – данные не вставляются в базу данных, но идентификатор автоинкремента

Я работаю над новым платежным модулем для Magento и столкнулся с проблемой, которую я не могу объяснить. Следующий код, который запускается после кредитной карты, проверяется:

$table_prefix = Mage::getConfig()->getTablePrefix(); $tableName = $table_prefix.'authorizecim_magento_id_link'; $resource = Mage::getSingleton('core/resource'); $writeconnection = $resource->getConnection('core_write'); $acPI = $this->_an_customerProfileId; $acAI = $this->_an_customerAddressId; $acPPI = $this->_an_customerPaymentProfileId; $sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3')"; $writeconnection->query($sql); $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2')"; $writeconnection->query($sql); $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1')"; $writeconnection->query($sql); 

Я проверил использование Firebug и FirePHP, что SQL-запросы синтаксически правильны и ошибок не возвращают.

Странная вещь здесь в том, что я проверил базу данных, и значение autoincrement увеличивается при каждом запуске кода. Однако в базу данных не добавляются строки. Я проверил это, добавив die(); заявление сразу после первой записи.

Любые идеи, почему это происходит?

Относительная часть файла config.xml такова:

 <config> <global> <models> <authorizecim> <class>CPAP_AuthorizeCim_Model</class> </authorizecim> <authorizecim_mysql4> <class>CPAP_AuthorizeCim_Model_Mysql4</class> <entities> <anlink> <table>authorizecim_magento_id_link</table> </anlink> </entities> <entities> <antypes> <table>authorizecim_magento_types</table> </antypes> </entities> </authorizecim_mysql4> </models> <resources> <authorizecim_setup> <setup> <module>CPAP_AuthorizeCim</module> <class>CPAP_AuthorizeCim_Model_Resource_Mysql4_Setup</class> </setup> <connection> <use>core_setup</use> </connection> </authorizecim_setup> <authorizecim_write> <connection> <use>core_write</use> </connection> </authorizecim_write> <authorizecim_read> <connection> <use>core_read</use> </connection> </authorizecim_read> </resources> </global> </config> 

Изменить: запрос на создание таблицы в ее нынешнем виде:

 CREATE TABLE `mag_authorizecim_magento_id_link` ( `link_id` INT(11) NOT NULL AUTO_INCREMENT, `magCID` INT(11) NOT NULL, `anCID` INT(11) NOT NULL, `anOID` INT(11) NOT NULL, `anObjectType` INT(11) NOT NULL, PRIMARY KEY (`link_id`) ) ENGINE=INNODB AUTO_INCREMENT=44 DEFAULT CHARSET=utf8 

похоже, что вам не хватает команды commit.

 ->save() 

..или что-то

После копания кода и поиска по всему, я понял, что Magento использует модель транзакции для соединений с базой данных. В результате Imre L имел правильную идею, но не тот код.

В качестве эксперимента я изменил этот код:

 $sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3')"; $writeconnection->query($sql); $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2')"; $writeconnection->query($sql); $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1')"; $writeconnection->query($sql); 

к этому:

 $sql = "insert into {$tableName} values ('', '$customerId', '$acPI', '$acPI', '3'); commit;"; $writeconnection->query($sql); $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acAI', '2'); commit;"; $writeconnection->query($sql); $sql = "insert into {$tableName} (magCID, anCID, anOID, anObjectType) values ('$customerId', '$acPI', '$acPPI', '1'); commit;"; $writeconnection->query($sql); 

Удивительно, но это сработало. Новые значения появились в базе данных. (Я не понимал, что транзакции, поддерживаемые MySQL)

Где-то в моем новом коде я запрещал выполнение инструкции commit, поэтому значения не сохранялись в базе данных. Я буду охотиться на это, когда я пойду, но на данный момент, commit; должен остаться.

Спасибо за помощь, которая работает над этим.