布噜布噜吐泡泡 2019-05-26 11:31 采纳率: 0%
浏览 508

php mysqli多次调用存储过程,每次只执行一次。

mysqli多次调用存储过程,每次只执行一次,但是分开调用又能够实现。
找网上的代码,说是将一次调用建立一个链接,但是也不行。麻烦各位大神帮我看看了,拜托

 class linDb{
       public $conn;
           function link(){
             $host="localhost";
             $username="root";
             $password="";
             $dbname="shop";
             $conn=@mysqli_connect($host, $username, $password)
            or die ("数据库连接错误"); //建立数据库连接
             mysqli_query($conn,"set names utf8");//连接标识符
             mysqli_select_db($conn,$dbname);//开启数据库,注意参数
             return $conn;
           }
            }
            //循环如下
            for($i=0;$i<count($arr);$i++)
       {
           //获取单笔金额的总值
        $l=new linDb(); $conn=$l->link();
        $sql="select * from shopcarview where uid=".$uid." and shoppingId=".$arr[$i];
        $result=mysqli_query($conn,$sql);
        $row=mysqli_fetch_row($result);
        $total=paymoney($row[11],$row[3]*$row[13]);
        $sql="call insert_indent($row[0],$indentnum,$addressid,$total,@result);";
        $stmt=mysqli_query($conn,$sql);     
        $stmt=mysqli_query($conn,"select @result;");    
        $obj =$stmt->fetch_array();
        $stmt->close();
        $conn->close();
        }
  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-09 20:38
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    你提到的问题是关于在PHP中使用MySQLi进行批量操作(例如插入、更新和删除)时如何确保只有第一次执行存储过程。以下是一个简单的示例,展示了如何处理这种情况:

    // 定义一个函数来执行存储过程并返回结果集
    function executeProcedureAndReturnResult($procedureName) {
        global $conn;
        $query = "CALL $procedureName()";
        if ($stmt = $conn->prepare($query)) {
            $stmt->execute();
            return $stmt->fetchAll();
        } else {
            echo 'Prepare statement failed.';
            exit;
        }
    }
    
    // 使用存储过程的方法
    $result = executeProcedureAndReturnResult('insertIndent');
    echo json_encode($result);
    
    $conn = null;  // 关闭连接
    

    在这个例子中,我们首先定义了一个名为executeProcedureAndReturnResult的函数,它接受存储过程名称作为参数,并返回查询结果。然后,在我们的主代码中,我们尝试通过global $conn声明变量,这允许我们在不同的存储过程中共享同一连接。如果准备成功的执行存储过程失败,我们将打印一条消息并退出程序。

    这样做的好处是,即使在同一次请求中执行多个存储过程,每个存储过程只会与唯一的连接相关联。当最后一个存储过程完成时,会自动关闭连接,以避免内存泄漏。

    评论

报告相同问题?