PHP函数访问数据库连接


PHP Function Accessing Database Connection

如何允许函数访问数据库连接而不使用GLOBAL?

config。

 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));

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

上面的代码给了我以下错误:Mysqli_query()期望参数1为mysqli,

中给出null

使用函数参数

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

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

In 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;
}

In 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));
}

您可能希望查看mysqli扩展和持久连接,以了解如何防止每次调用get_dbc()时重新建立连接的详细信息。还有其他方法可以做到这一点,例如为您的数据库连接创建一个单例类。

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

可以使用global关键字来获取变量$dbc的作用域

试试这个. .

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

(或)

试试这个…

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

,这样做....

$query = something($dbc);

这很简单,只需将$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);
}

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

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

function something($dbc)

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

$fn = function() using ($dbc)