mysql — получение UUID () после INSERT с переполнением стека

Я пытаюсь получить UUID, который только что был вставлен.

Это работает в phpMyAdmin. Но выдает ошибку в PHP.

$insert = $conn->query("
SET @usr_uuid = uuidToBin(UUID());

INSERT INTO `users` (`users`.`usr_uuid`) VALUES ( @usr_uuid );

SELECT HEX(@usr_uuid) AS usr_uuid;
");

Однако я получаю эту ошибку:

[errno] => 1064
[sqlstate] => 42000
[error] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INSERT INTO `users` (`users`.`usr_uuid`) VALUES ( @u' at line 3

Как мне исправить это?

0

Решение

У вас есть два варианта сделать это.

Прежде всего, используют транзакции. Например:

$conn->begin_transaction();
$insert = $conn->query("SET @usr_uuid = uuidToBin(UUID());";
$insert = $conn->query("INSERT INTO `users` (`users`.`usr_uuid`) VALUES ( @usr_uuid );";
$insert = $conn->query("SELECT HEX(@usr_uuid) AS usr_uuid;";
$conn->commit();

Эта опция работает, только если вы используете mysqli и механизм хранения innodb.

Второй вариант, делать два запроса:

$insert = $conn->query("INSERT INTO `users` (`users`.`usr_uuid`) VALUES ( uuidToBin(UUID() );";
$insert = $conn->query("SELECT HEX(usr_uuid) AS usr_uuid FROM `users`;";

Эта опция может упасть в проблему наличия новой вставки, пока вы делаете это. Но, если у пользователей таблицы есть идентификатор, вы можете использовать mysql-insert-id (), как предложено @ user3783243

-1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector