【发布时间】:2019-10-27 23:36:19
【问题描述】:
我最近试图保护我的查询免受 SQL 注入。我已经开始将用于查询的字符串转换为语句,但是,我所做的一些字符串需要同时进行多个查询,因为一个插入的 id 将作为外键添加到下一个,我将通过使用 LAST_INSERT_ID() 获得,因此我需要它们一个接一个地执行。
一个语句可以同时保存多个查询并一次执行吗?
这是之前的代码,由作者提供。
$sql = "INSERT INTO `user_info`(`first_name`, `last_name`, `phone`, `cpf`)
VALUES ('{$firstName}', '{$lastName}', '{$phone}', '{$cpf}');";
$sql .= "SELECT LAST_INSERT_ID() INTO @mysql_variable_here;";
$sql .= "INSERT INTO `{$table}`(`email`, `password`, `active`,`user_info_id`, `created`, `role_id`" . $restaurantInsert . ")
VALUES ('{$email}','{$password}', 1, @mysql_variable_here, '{$created}', {$role}" . $restaurantValue . " );";
$sql .= "INSERT INTO `address`(number, street, city, state, zip, district, country, created, user_info_id)
VALUES ('{$number}', '{$street}', '{$city}', '{$stateCode}', '{$zip}', '{$district}', 'BR', '{$created}', @mysql_variable_here);";
$result = $conn->multi_query($sql);```
【问题讨论】:
-
这不安全。没有使用
multi_query是安全的。将参数化查询与准备好的语句和事务一起使用。 -
$restaurantInsert和$restaurantValue中有什么内容?
标签: php sql mysqli prepared-statement