2016-03-26 112 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 
}