为多个查询打开和关闭 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";
...
}
我有一个关于何时何地必须建立和关闭数据库连接的问题。我有一组要插入到数据库中或从数据库中删除的行,它是一个混合物。
(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";
...
}