我有一个关于何时何地必须建立和关闭数据库连接的问题。我有一系列要插入数据库或从数据库中删除的行,它是一个混合体。
(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个行的数组要插入/删除。有没有更好的方法呢?非常感谢。
答案 0 :(得分:3)
多次添加include
肯定是错误的。在脚本顶部进行一次连接,然后可以在整个过程中使用它。
您的问题是您的功能无法使用$conn
。您需要声明$conn
存在&#39;外面&#39;你的函数,即:全局范围,在每个函数中添加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";
...
}