PHP函数访问数据库连接

时间:2011-07-20 09:11:53

标签: php scope

如何在不使用GLOBAL的情况下允许函数访问数据库连接?

的config.php

 DEFINE ('DB_HOSTNAME', 'hostname');
 DEFINE ('DB_DATABASE', 'database');
 DEFINE ('DB_USERNAME', 'username');
 DEFINE ('DB_PASSWORD', 'password');

 $dbc = mysqli_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

 if(!$dbc) die("Unable to connect to MySQL: " . mysqli_error($dbc));

的functions.php

 function something()
 {
 $info = mysqli_query($dbc, "SELECT info FROM text") or die("Error: ".mysqli_error($dbc));
 }

上面给出了以下错误:      mysqli_query()期望参数1为mysqli,在

中给出null

5 个答案:

答案 0 :(得分:5)

使用功能参数

function something ($dbc) {
  // your db code here
}

function arguments

答案 1 :(得分:2)

将数据库句柄传递给函数,如@KingCrunch和其他人所说,或调用返回句柄的函数:

config.php

function get_dbc() {
    $dbc = mysqli_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
    if(!$dbc) die("Unable to connect to MySQL: " . mysqli_error($dbc));
    return $dbc;
}

functions.php

require_once('config.php');

function something()
{
    $dbc = get_dbc();
    $info = mysqli_query($dbc, "SELECT info FROM text") or die("Error: ".mysqli_error($dbc));
}

您可能希望查看The mysqli Extension and Persistent Connections,了解有关如何阻止在每次调用get_dbc()时重新建立连接的详细信息。还有其他方法,例如为数据库连接创建单例类。

答案 2 :(得分:1)

有两种方法可以通过传递参数,另一种方法是使用函数闭包,如@Ondrej所说。但我想这两个都要求你修改代码,如果是这样,那么我建议你使用global关键字。

您可以使用global关键字来获取变量$dbc

的范围

试试这个..

function something()
{
   global $dbc;
   $info = mysqli_query($dbc, "SELECT info FROM text") or die("Error: ".mysqli_error($dbc));
}

<强>(OR)

试试这个......

function something()
{
    $dbc = func_get_arg(0);
     $info = mysqli_query($dbc, "SELECT info FROM text") or die("Error: ".mysqli_error($dbc));
}

&安培;这样做....

$query = something($dbc);

答案 3 :(得分:0)

还有更多方法。你可以使用经典的程序风格:

function something($dbc)

或匿名函数(如果使用PHP5.3):

$fn = function() using ($dbc)

答案 4 :(得分:0)

它如此简单只需将你的$ conn变量传递给另一个调用函数(而不是像

那样建立新的连接)

yourpage.php

$conn = new mysqli($servername, $username, $password, $dbname);
someFunction ($conn)//you can add other parameters if you like 

function someFunction ($conn) {
    $result = mysqli_query ($conn, "SELECT * FROM examples);
}

注意:总是为数据库访问建立新连接并不是一种好的做法。所以总是连接一次并在每个地方使用它。(但如果你的要求不同并且需要多个连接,那么你可以进行多次连接)