2016-03-26 158 views
0

我想要的東西很簡單,但似乎沒有工作。我想創建一個名爲db_conn()的函數,所以我可以調用它來打開一個mysql數據庫,而不是每次需要時都進行新的調用。下面是函數:數據庫連接功能

/************************************** 
    Open Database Connection Function. 
    ***************************************/ 
    /* Database Connection Settings */ 
    $_SESSION['servername']  = "localhost"; 
    $_SESSION['mysql_username'] = "abc123"; 
    $_SESSION['mysql_password'] = "mypass"; 
    $_SESSION['dbname']   = "dbname"; 


    function db_conn() { 

     $conn = new mysqli($_SESSION['servername'], $_SESSION['mysql_username'], $_SESSION['mysql_password'], $_SESSION['dbname']); 

     // Check connection 
     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 

     // Test if connection succeeded 
     if(mysqli_connect_errno()) { 
      die("Database connection failed: " . 
       mysqli_connect_error() . 
       " (" . mysqli_connect_errno() . ")" 
      ); 
     } 
    } 

示例調用的功能和回聲出數據:

 <?php 
     db_conn(); 

     $sql = "SELECT id, region FROM tbl_region;"; 
     $result = $conn->query($sql); 

     if ($result->num_rows > 0) { 
      // output data of each row 
      while($row = $result->fetch_assoc()) { 

       echo '<td width="1"><label for="delete"> 
    <input type="radio" name="region" id="region" value="'.$row["id"].'"> 
</label></td>'; 

       echo '<td align="left" valign="top"><p>'.$row["region"].'</p></td></tr>'; 
      } 
     } 

     ?> 

當我測試它停止在上面的代碼,並且不顯示任何錯誤的頁面。有人可以告訴我我在做什麼錯誤的db_conn函數?

+0

是什麼在的phpinfo使用error_reporting節目嗎? –

回答

2

$conn只在您的功能db_conn()內部可用,它超出了範圍之外。

如果您啓用錯誤報告並顯示它們,您將會注意到錯誤100%。

儘管有這樣做的更好的方法,但如果你想做它的練習,你可以讓你的函數返回連接資源給調用者。

$conn=db_conn(); 

而且你的函數可以返回它

function db_conn() { 
// body 
return $conn; 
} 
+0

好吧,這意味着它不會工作?或者如果它可以做到我需要做的事情呢?或者我需要使conn成爲Session變量,以便頁面可以看到它的值? –

+0

你說有更好的方法,我是新來的PHP可以告訴我一個更好的方式,請所以我做得對嗎?我認爲這是最好的方法。再次感謝! –

+0

一個設計模式被稱爲依賴注入,你可以在這裏通過它https://codeinphp.github.io/post/dependency-injection-in-php/ –

0

你也可以做到這一點

$conn = ''; 
function db_conn() { 
    global $conn; 
    $conn = new mysqli... //the rest of your code here 
}