MySql/PHP Insert SET Last_Insert_ID()


MySql/PHP Insert SET Last_Insert_ID()

我有以下PHP代码

$con = mysqli_connect($host, $user, $password, $database) or die ("Couldn't connect to database"); //assume these variables are declared
$sql = "INSERT INTO Users
       (
           FirstName
           ,MiddleName
           ,LastName
       )
       Values
       (
           'John'
           ,'A'
           ,'Smith'
       );
       SET @petID = LAST_INSERT_ID();
       INSERT INTO Pets
       (
           UserID
           ,Name
       )
       Values
       (
           @petID
           ,'myPet'
       );";
if(!mysqli_query($con, $sql))
{
    die('Error: ' . mysqli($con));
}
mysqli_close($con);

当我尝试执行此代码时,会发生以下错误:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET @petID = LAST_INSERT_ID(); INSERT INTO Pets ( UserID ,Name ' at line 24

为了测试mySql语法是否有错误,我将字符串放在一个文件中,并直接使用:mysql -u root -p myDatabase < InsertSqlStatement.sql运行它。该语句执行起来没有任何问题。

我的PHP代码出了什么问题?

MySQLi不会出于安全目的进行多次查询;您想要mysqli_multi_query:

http://php.net/manual/en/mysqli.multi-query.php

在对mysqli_query的调用中不能执行多个SQL查询。如果要执行多个查询,可以逐个发送,也可以使用mysqli_multi_query

在PHP中,不能在单个query()调用中运行多个查询。这是一种针对某些形式的SQL注入攻击的简单安全机制。这是内置在mysqlphp驱动程序中的,您不能绕过它。当您复制查询字符串并单独运行时,它会正常运行,因为命令行工具不受相同限制的约束。

您必须单独运行查询:

$result = mysqli_query('INSERT ...');
$result = mysqli_query('SELECT @petID = ...');
$result = mysqli_query('INSERT ....');