我有以下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 ....');