如何解决有关 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 举报,一经查实,本站将立刻删除。