为多个查询打开和关闭 mysqli 连接

Opening and closing a mysqli connection for multiple queries

我有一个关于何时何地必须建立和关闭数据库连接的问题。我有一组要插入到数据库中或从数据库中删除的行,它是一个混合物。

(1)这是我的代码,我只是在其中测试插入数据库:

include('connect.php');

foreach($array as $row)
{
    if($row['insert'])
    {
       insertRow();
    }else
    {
        //deleteRow();
    }
}

function insertRow()
{
    $sql = "insert sql statement";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}

(2)这行不通。所以我将我的包含文件移到这里:

foreach($array as $row)
{
    include('connect.php');
    if($row['insert'])
    {
       insertRow();
    }else
    {
        //deleteRow();
    }
}

(3)它仍然不起作用,所以我将我的包含移到这里终于起作用了:

function insertRow()
{
    include('connect.php');
    $sql = "insert sql statement";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
}

所以我的问题是: 我必须为每个 sql 查询建立连接然后关闭它吗?那么对于我想做的事情,它看起来像这样吗?

foreach($array as $row)
{

    if($row['insert'])
    {
       insertRow();
    }else
    {
        deleteRow();
    }
}

function insertRow()
{
    include('connect.php');
    $sql = "insert sql statement";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
    conn->close();
}

function deleteRow()
{
    include('connect.php');
    $sql = "delete sql statement";

    if ($conn->query($sql) === TRUE) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql . "<br>" . $conn->error;
    }
    conn->close();
}

然而,这似乎效率低下,尤其是当我有一个 100 行的数组到 insert/delete 时。有更好的方法吗?非常感谢。

多次添加include肯定是错误的。在脚本顶部建立一次连接,然后就可以在整个脚本中使用。

您的问题是 $conn 在您的函数内部不可用。您需要声明 $conn 存在 'outside' 您的函数,即:通过在每个函数中添加 global $conn; 来声明全局作用域。

// Create $conn in Global Scope
include('connect.php');

function insertRow()
{
    //include('connect.php');
    global $conn;

    $sql = "insert sql statement";
    ...

}

function deleteRow()
{
    global $conn;

    $sql = "delete sql statement";
    ...

}