Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP在INSERT之后获取UUID()_Php_Mysql_Mariadb_Uuid - Fatal编程技术网

使用PHP在INSERT之后获取UUID()

使用PHP在INSERT之后获取UUID(),php,mysql,mariadb,uuid,Php,Mysql,Mariadb,Uuid,我正在尝试获取刚刚插入的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]

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


我如何着手解决这个问题?

您有两种选择

首先,我们正在使用事务。例如:

$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(),将查询划分为3并一致执行,或者使用多查询-也许只需执行
insert-INTO`users`(`users`.`usr\uuid`)值(uuidToBin(uuid())
并选择另一个
usr\u uuid
viaquery@splash58如果在我执行另一个查询时有一个新的insert呢?使用
mysql\u query
,一次只能执行一条语句。您不需要事务;变量在会话中保持不变。您的第二个方法将返回所有记录,而不仅仅是插入的记录。我不知道表。这是因为,在第二个选项中,我建议使用mysql-insert-id(),但是如果没有EXPLAIN表,我就不知道是否有使用它的自动增量列。