【问题标题】:Opening and closing a mysqli connection for multiple queries [duplicate]打开和关闭多个查询的mysqli连接[重复]
【发布时间】:2015-12-25 09:07:03
【问题描述】:

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

(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 行的数组要插入/删除。有没有更好的方法来做到这一点?非常感谢。

【问题讨论】:

  • 您不需要多次包含connect.php。在顶部包含 connect.php 文件,然后在函数参数中传递 $conn 变量,如 deleteRow($conn) 或者你可以像 deleteRow(){global $conn;......} 一样使用它

标签: php database mysqli connection


【解决方案1】:

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

您的问题是 $conn 在您的函数内部不可用。您需要声明 $conn 存在于您的函数“外部”,即:通过在每个函数内添加 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";
    ...

}

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2011-09-05
    相关资源
    最近更新 更多