0

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

4

3 回答 3

3

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

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

于 2013-08-27T20:38:01.477 回答
2

您不能在对 的调用中执行多个 SQL 查询mysqli_query。如果要执行多个查询,请一一发送或使用mysqli_multi_query.

于 2013-08-27T20:37:51.997 回答
1

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

您必须单独运行查询:

$result = mysqli_query('INSERT ...');
$result = mysqli_query('SELECT @petID = ...');
$result = mysqli_query('INSERT ....');
于 2013-08-27T20:37:20.083 回答