MySql / PHP插入SET Last_Insert_ID()

时间:2013-08-27 20:34:09

标签: php mysql sql

我有以下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代码有什么问题?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

mysqli_query的调用中,您无法执行多个SQL查询。如果要执行多个查询,请逐个发送或使用mysqli_multi_query

答案 2 :(得分:1)

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

您必须单独运行查询:

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