Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql/PHP插入集Last_Insert_ID()_Php_Mysql_Sql - Fatal编程技术网

MySql/PHP插入集Last_Insert_ID()

MySql/PHP插入集Last_Insert_ID(),php,mysql,sql,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

我有以下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
thestatement执行时没有任何问题


我的PHP代码有什么问题?

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

您必须单独运行查询:

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

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

您必须单独运行查询:

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

在调用
mysqli\u query
时,不能执行多个SQL查询。如果要执行多个查询,请逐个发送查询或使用
mysqli\u多查询

调用
mysqli\u查询
时不能执行多个SQL查询。如果要执行多个查询,请逐个发送查询,或者使用
mysqli\u multi\u query

出于安全目的,mysqli不会执行多个查询;您需要mysqli\u多\u查询:


出于安全目的,MySQLi不会执行多个查询;您需要mysqli\u多\u查询:


petID的范围是如何工作的?如果我执行查询来设置petID,下面的
mysqli\u查询
是否能够获取它?
@petID的范围如何工作
?如果我执行一个查询来设置petID,下面的
mysqli\u查询
是否能够获取它?