【发布时间】:2021-04-26 11:09:48
【问题描述】:
我是 php 新手。我正在尝试执行以下查询。我知道我必须使用mysqli_multi_query,但到目前为止我所有的尝试都给了我error。如何执行这些查询?我已阅读并尝试运行其他失败的示例。
<?php
include_once 'connect.php';
$user_values = json_encode($_POST['user_values']);//get a json object
$data = json_decode($user_values);
$sql = "";
if (isset($data->phone)) {
$sql .= "CALL new_company_phone('$data->name', $data->phone)";
}
/*procedure that inserts value of "phone" to the corresponding "name" row */
if (isset($data->street)) {
$sql .= "CALL new_company_street('$data->name', '$data->street')";
}
if (isset($data->street_num)) {
$sql .= "CALL new_company_street_num('$data->name' , $data->street_num)";
}
if(isset($data->city)){
$sql .= "CALL new_company_city('$data->name', '$data->city')";
}
if(isset($data->country)){
$sql .= "CALL new_company_country('$data->name', '$data->country')";
}
/* execute multi query */
if (!mysqli_multi_query($con, $sql)) {
echo "error"; }
【问题讨论】:
-
我认为您需要以分号结束每个查询。我不是指您在 PHP 代码行末尾已有的分号,而是 inside 字符串。此外,看起来您对 SQL 注入攻击很开放。
-
为什么需要使用
mysqli_multi_query()?你可以打几个电话到mysqli_query()。mysqli_multi_query()使跟踪结果集和错误变得困难。我注意到您的最后一个电话似乎缺少程序名称。 FWIW,您最好编写一个更新过程来处理所有这些不同的更改,而不是编写多个并多次调用本质上是一个更新的内容。 -
我强烈建议不要使用
mysqli_multi_query()。我从未见过任何合法的使用它,它只会让事情变得更难。你也不能使用准备好的语句,所以你打开了 SQL 注入。 -
您似乎可以通过一个查询完成所有这些过程所做的一切......
-
同意...看起来这可能只是一个单独的 INSERT 查询而不是一整套过程的工作。他们到底是做什么的?
标签: php mysqli mysqli-multi-query