#php #mysql #select #transactions
Вопрос:
Кто-нибудь может объяснить, почему в этом блоке кода «select *» не возвращает запись? Категория таблицы содержит множество записей.
$this->db->execute('START TRANSACTION;');
$this->db->execute("
update ps_category c
left join products pa on (c.key = pa.id_product and pa.special)
set c.active = 0
where pa.id_product IS NULL and c.id_category >2 and c.id_category NOT IN(7,8)
");
$categories = $this->db->executeS("select * from ps_category"); //return 0 record
$this->db->execute('COMMIT;');
Вместо перемещения «начать транзакцию» в первой инструкции «обновить» заставьте «выбрать» вернуть фактические записи. Почему?
$this->db->execute("
update ps_category c
left join products pa on (c.key = pa.id_product and pa.special)
set c.active = 0
where pa.id_product IS NULL and c.id_category >2 and c.id_category NOT IN(7,8)
");
$this->db->execute('START TRANSACTION;');
$categories = $this->db->executeS("select * from ps_category");//return the actual rows
$this->db->execute('COMMIT;');
РЕДАКТИРОВАТЬ: в то же время нет другого процесса, который изменял бы таблицу. Единственное, что было изменено, — это позиция «начать транзакцию».
Комментарии:
1. и почему вы не сделали свою расшифровку
2. @nbk Я не сообщал о фиксации в примере, но в реальном коде она есть.
3. а) в вашей рабочей версии вы используете «dbPrestashop», в других вы используете «db» — это просто ошибка, очищающая ваш код для вопроса, или вы используете другие подключения? b) «0» указывает на ошибку, поэтому проверьте сообщение об ошибке mysql.
4. возможно, эта статья сможет пролить некоторый свет на это.
5. @Solarflare нет, это была ошибка в примере кода ;), я отредактировал вопрос… Спасибо. В производственном коде я переместил строку с «начать транзакцию» только с «до» на «после» инструкции «обновить»