如果我的mysql连接在另一个包含文件中,如何在函数内部建立mysql连接?
这是mysql连接包含文件。
DEFINE ('DB_USER', 'username');
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'adfg');
$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$dbc) {
trigger_error ('Could not connect to MySQL: ' . mysqli_connect_error() );
}
答案 0 :(得分:2)
文件:DB.php
DEFINE ('DB_USER', 'username');
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'adfg');
function getConnection() {
$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$dbc) {
trigger_error ('Could not connect to MySQL: ' . mysqli_connect_error() );
} else {
return $dbc;
}
}
其他档案:
require_once '/path/to/DB.php';
$connection = getConnection();
var_dump($connection->host_info);
答案 1 :(得分:0)
你可以在函数中创建$ dbc global ....只要包含这两个文件它就可以正常工作
@powtac:
我同意每个案例,但是如果你打算为大型网站制作更强大的数据库解决方案,那么拥有一个类对象(命名很重要)可以成为一个强大的工具。这并不是说你不能做同样的事情,并使对象成为函数内部的静态变量,以防止粗心的开发人员覆盖它:)
答案 2 :(得分:0)
由于您可能会多次调用getConnection
,因此将其设为static
是有意义的,这样就不会多次创建它。建立在powtac的版本上:
DEFINE ('DB_USER', 'username');
DEFINE ('DB_PASSWORD', 'password');
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'adfg');
function getConnection() {
static $dbc;
if (!$dbc) {
$dbc = mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (!$dbc) {
trigger_error ('Could not connect to MySQL.', E_USER_ERROR);
}
}
return $dbc;
}
然后,您将包含此文件,并在方便的地方拨打getConnection
。
除了创建$dbc
static
以便它只创建一次之外,我还在无法建立连接时删除了MySql错误消息(如果你不提供这样的信息通常是个好主意用户可能会看到它;在开发时连接上的错误相对较少,可以在现场轻松调试)。最后,我离开了trigger_error
并且没有用更常见的die
替换它,因为它可能是错误处理框架的一部分。但是,我确实提高了错误严重性,以表示尝试连接时的错误应该是一个立即显示停止。