Я просмотрел подобные вопросы здесь, но не смог решить мою проблему … вся помощь очень ценится!
По сути, у меня есть следующий код SQL в моем PHP:
$query = 'CREATE TEMPORARY TABLE tmp SELECT * from orders WHERE id='.$old_order_id.';
ALTER TABLE tmp drop id; # drop autoincrement field
UPDATE tmp SET groupID=null, timeOrdered=CURRENT_TIMESTAMP, totalOrderStatus=0;
INSERT INTO orders SELECT 0,tmp.* FROM tmp;
DROP TABLE tmp;';
$db->exec($query);
$new_order_id = $db->lastInsertId();
Теперь я бы подумал, что lastInsertId () успешно вернет идентификатор строки, которая была в последний раз вставлена в ‘orders’. Вместо этого я получаю ноль — но я не знаю, происходит ли это из-за того, что он принимает последний вставленный идентификатор таблицы ‘tmp’, или из-за какой-то другой ошибки, которую я делаю. (Я не понимаю, почему он взял бы идентификатор из tmp, так как это не последний вставленный идентификатор на самом деле …)
Похоже, вы просто пытаетесь скопировать существующую строку в вашу таблицу с некоторыми измененными данными. Почему бы вам не упростить это и сделать это так:
INSERT INTO orders (
/* fields you are changing */
groupID,
timeOrdered,
totalOrderStatus,
/* other fields from select below that are not changing */
field1,
field2,
...
)
SELECT
/* values for fields you are changing */
null,
CURRENT_TIMESTAMP,
0,
/* other fields from order table that are to remain unchanged */
field1,
field2,
...
FROM orders
WHERE id = ?
Просто не вставляйте значение для поля первичного ключа (при условии, что оно является автоинкрементом), тогда ваш идентификатор вставки будет работать нормально.
Других решений пока нет …