如何在不使用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答案 0 :(得分:5)
答案 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);
}
注意:总是为数据库访问建立新连接并不是一种好的做法。所以总是连接一次并在每个地方使用它。(但如果你的要求不同并且需要多个连接,那么你可以进行多次连接)