我有以下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代码有什么问题?
答案 0 :(得分:3)
MySQLi不会出于安全目的进行多次查询;你想要mysqli_multi_query:
答案 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 ....');