2015-09-28 40 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