2015-09-28 99 views
1

我有一个问题,关于什么时候和什么地方连接到数据库必须进行和关闭。我有一个要插入或从数据库中删除的行数组,这是一个混合。打开和关闭多个查询的mysqli连接

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

+1

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

回答

3

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

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

} 
+0

你真是太棒了! – Moo33

相关问题