Получить идентификатор вставки в подготовленном состоянии запроса?

У меня есть код PHP, который вставляет много чего в некоторые таблицы.

$token = bin2hex(openssl_random_pseudo_bytes(64));
$what = 'profilepicture';
$name = 'Profile picture';
$specs = '';
$add = '';

$insertion = $mysql->prepare("UPDATE users SET image = ? WHERE id = ?");
$insertion->bind_param('ss', $intheendtheimageuknowamk, $myid);

$add_photo_gallery = $mysql->prepare("INSERT INTO users_photos_galleries (uid,name,specs,timestamp,token) VALUES (?,?,?,?,?)");
$add_photo_gallery->bind_param('sssss', $myid, 'Profile images', '', $posted_on, $token);
$add_photo_gallery->execute();

$lastid_gallery = $add_photo_gallery->insert_id;
$add_photo = $mysql->prepare("INSERT INTO users_photos (uid,gid,path,name,specs,what,timestamp,token) VALUES (?,?,?,?,?,?,?,?)");
$add_photo->bind_param('ssssssss', $myid, $lastid_gallery, $intheendtheimageuknowamk, $name, $specs, $what, $posted_on, $token);
$add_photo->execute();

$lastid_photo = $add_photo->insert_id;
$add_log = $mysql->prepare("INSERT INTO users_logs (uid,what,relid,addition,timestamp,token) VALUES (?,?,?,?,?,?)");
$add_log->bind_param('ssssss', $myid, $what, $lastid_photo, $add, $posted_on, $token);
$add_log->execute();

echo $intheendtheimageuknowamk;

Кажется, что сейчас это работает, но могут возникнуть некоторые ошибки, например, если не удается вставить только второй запрос, то остальные тоже не будут вставлены, НО первый. Я попытался поместить каждый запрос в оператор if и просто поговорить со следующим запросом, если выполнение предыдущего было успешным, но логически это был бы тот же результат. Есть ли другой способ решить эту проблему? Просто выведите конечное имя, проверив, что выполнение всех запросов тоже не сработает, так как мне нужен идентификатор last_insert для запросов, который на самом деле является для меня самой большой проблемой.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
33
1

Ответы 1

Не используйте метод rowCount(). Этот метод вернет количество строк, обработанных вашим запросом.

Чтобы получить последний вставленный идентификатор, используйте $id = $mysql->lastInsertId();

Да да да я знаю. Это то, что я уже делаю. Но я хочу проверить, все ли запросы были успешно запущены, а если нет, не вставляйте ничего в какую-либо таблицу.

Ayumi Takanashi 09.03.2018 15:46

@AyumiTakanashi Используйте для этого транзакции SQL.

David 09.03.2018 15:47

Собираюсь проверить это @ Дэвид

Ayumi Takanashi 09.03.2018 16:03

Дмн Дэвид, ты спас мне день! Спасибо вам большое. Даже благодаря этому я получил очень полезные знания.

Ayumi Takanashi 09.03.2018 16:06

Другие вопросы по теме