使用php在insert之后获取uuid()

1tu0hz3e  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(424)

我正在尝试获取刚刚插入的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

我该怎么解决这个问题?

dly7yett

dly7yett1#

你有两个选择。
首先,是使用事务。例如:

$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`;";

此选项可能会遇到这样一个问题,即在执行此操作时有一个新的插入。但是,如果表用户有一个id,那么可以使用@user3783243建议的mysql-insert-id()

相关问题