У меня есть следующий код для обновления строки в таблице MariaDB:
<?php
$statement = <<<SQL
UPDATE `my_table`
SET
`my_name` = :my_name,
`my_id` = LAST_INSERT_ID(my_id)
WHERE `my_id` = :my_id;
SQL;
try {
$sth = $this->dbh->prepare($statement);
$sth->bindValue(':my_name', 'Foo');
$sth->bindValue(':my_id', 12, PDO::PARAM_INT);
$sth->execute();
if ($this->dbh->lastInsertId() == 0) {
echo 'Id not found!';
}
} catch (\PDOException $e) {
echo 'Transaction failed!';
}
Часть my_id = LAST_INSERT_ID(my_id)
в моем предложении SET устанавливает значение LAST_INSERT_ID()
для DB Марии в значение `my_id` обновленной строки.
Выполнение SELECT LAST_INSERT_ID();
в моем клиенте sql подтверждает, что значение установлено (результат = 12).
В php я использую PDO::lastInsertId
, чтобы получить это значение иесли это 0, соответствующая строка не существует.Таким образом, я могу сделать различие между ошибкой «my_id не существует» и тихим ОБНОВЛЕНИЕМ ничего (и всех других ошибок транзакций).
Это прекрасно работает в PHP 5.6.23 / MariaDB 10.1.13 , но теперь я нахожусь на PHP 7.2.11 / MariaDB 10.1.36 и возвращаемое значение PDO::lastInsertId
остается нулевым, в то время какстрока действительно обновлена.
Изменилось ли поведение PDO::lastInsertId
между этими версиями?Это какая-то ошибка?Раньше код работал случайно, но он содержит ошибку или что-то?
Спасибо за ваш ответ.
Редактировать: я могу подтвердить, что код все еще работает с PHP v7.1.8