微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有关 mysqli_multi_query() 的详细信息?

如何解决有关 mysqli_multi_query() 的详细信息?

我是 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"; }

解决方法

恰恰相反!你永远不应该使用mysqli_multi_query()!如果你认为你发现这个函数很好用,那么你应该重新考虑你的方法。

您应该使用的是带有参数绑定的准备好的语句。每个 CALL() 应该是一个单独的语句。如果需要,您可以创建一个函数,以便更轻松地调用每个函数。

例如:

function callSP(mysqli $mysqli,string $sql,array $params) {
    $stmt = $mysqli->prepare($sql);
    $stmt->bind_param(str_repeat("s",count($params)),...$params);
    $stmt->execute();
}

if (isset($data->phone)) {
    callSP($con,"CALL new_company_phone(?,?)",[$data->name,$data->phone]);
}

if (isset($data->street)) {
    callSP($con,"CALL new_company_street(?,$data->street]);
}
// and so on...

很难说你的存储过程实际上做了什么。您可能需要根据它们是否返回结果以及它们是否使用游标来调整从 PHP 调用它们的方式。一般来说,我建议尽可能避免使用存储过程;你可以直接在 PHP 中做同样的事情。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。