Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 调用同一文件中的第二个函数时出现Mysqli错误_Php_Mysqli - Fatal编程技术网

Php 调用同一文件中的第二个函数时出现Mysqli错误

Php 调用同一文件中的第二个函数时出现Mysqli错误,php,mysqli,Php,Mysqli,insert函数调用正确,数据也正确插入 插入后,我将关闭finally块中的连接 但是在调用selectData()函数的同时,我遇到了一个错误 未定义变量:conn和未定义变量:stmt 如何为第二个函数重新打开连接?当您在函数中为数据库连接使用一次include_时,这将仅在第一次加载脚本。在函数结束时,您还将关闭连接 <?php function insertData() { include_once 'database/connection.ph

insert函数调用正确,数据也正确插入

插入后,我将关闭finally块中的连接

但是在调用selectData()函数的同时,我遇到了一个错误

未定义变量:conn和未定义变量:stmt


如何为第二个函数重新打开连接?

当您在函数中为数据库连接使用一次
include_
时,这将仅在第一次加载脚本。在函数结束时,您还将关闭连接

<?php

    function insertData()
    {
        include_once 'database/connection.php';

        echo "<br>============= Insert Data =================<br>";

        try{
            $sql = "INSERT INTO table1 (activity_date, activity_name, activity_point) VALUES (?, ?, ?)";

            $stmt = $conn->prepare($sql);
            $stmt->bind_param("sss", $activity_date, $activity_name, $activity_point);

            // set parameters and execute
            $activity_date = "06-APR-2020";
            $activity_name = "Test";
            $activity_point = "5";
            $res = $stmt->execute();

            var_dump("<br>Res:- ".$res);
            print_r("<br>Result:- ".$res);

            if ($res) {
                echo "<br>Id:- ".$conn->insert_id;
                echo "<br>New records created successfully";
            }
            else{
                echo "<br>New records not inserted successfully";
            }

        }
        catch(Exception $e){
            echo "Exception:- ".$e;
        }
        finally{
            $stmt->close();
            $conn->close(); 
        }
    }


    // insertData();

    function selectData()
    {

        include_once 'database/connection.php';

        echo "<br>============= Select Data =================<br>";
        try{
            $sql = "SELECT * FROM table1 WHERE activity_id > ?";

            $stmt = $conn->prepare($sql);
            $stmt->bind_param("i", $activity_id);

            // set parameters and execute
            $activity_id = 6;
            $stmt->execute();

            if (!$stmt->errno) {
                // Handle error here
            }

            $result = $stmt->get_result(); //

            $rows = $result->num_rows;



            if ($rows > 0){
                while ($data = $result->fetch_all())
                {
                    // var_dump($data);
                    var_export($data);
                    echo "<br>";
                    print_r($data);
                }
            } 
            else{
                echo "Data Not Found";
            }


        }
        catch(Exception $e){
            echo "Exception:- ".$e;
        }
        finally{
            $stmt->close();
            $conn->close(); 
        }
    }

    selectData();


?>

第二次调用函数时,不会再次执行include操作,并且连接已关闭,因此不会重新建立连接

您应该只为整个脚本创建一个连接(很少有例外)。因此,在脚本开始时,使用include,然后将连接传递给需要使用它的任何函数/类

$conn->close(); 
将参数添加到函数中

include_once 'database/connection.php';

insertData($conn);
然后关闭与系统的连接


最后一件事,我更喜欢的是使用
require\u once
require
而不是
include\u once
include
,因为如果找不到文件,它们将停止脚本。

让我猜猜。在
数据库/connection.php
文件中初始化
$conn
require_once
按照tin上的说明进行操作。它仅在您第一次调用它时加载文件获取错误:警告:mysqli::prepare():无法在第56行的C:\xampp\htdocs\wfm\index.php中获取mysqli致命错误:未捕获错误:在C:\xampp\htdocs\wfm\index.php中调用bool上的成员函数bind_param()。php:57堆栈跟踪:#0 C:\xampp\htdocs\wfm\index.php(97):selectData(Object(mysqli))#1{main}下一个错误:在C:\xampp\htdocs\wfm\index.php:92堆栈跟踪中调用bool上的成员函数close()。#0 C:\xampp\htdocs\wfm\index.php(97):selectData(Object(mysqli))#1{main}抛出C:\xampp\htdocs\wfm index.php第92行是否在其他任何地方关闭连接?代码保持不变。我刚刚在函数中传递了连接,在函数的顶部,我在文件的顶部添加了require
function insertData( $conn )