这是一个范围错误.您正在使$DBH成为全局变量.所以当你输入函数时,全局变量是不可用的.你有5个真正的选择.
1.使用全局关键字
function doSomething() {
global $DBH;
//...
这不是一个好主意,因为它使维护和测试成为一个PITA.想象一下,尝试调试该函数调用.你现在需要去找出$DBH被定义在哪里,试图弄清楚发生了什么事情
2.使$DBH成为函数的一个参数
function doSomething(MySQLi $DBH) {
它具有明确的优点.但是,由于调用代码需要跟踪全局变量,所以仍然不太好.
3.创建一个函数来“获取”$DBH对象
function getDBH() {
static $DBH = null;
if (is_null($DBH)) {
$DBH = new mysqli(...);
}
return $DBH;
}
function doSomething() {
$DBH = getDBH();
}
这具有完全摆脱全局变量问题的优点.但是,也难以拥有多个连接或重新使用其他连接的任何代码.
4.创建一个类来包装数据库访问
class Database {
public function __construct($host, $user, $pass) {
$this->DBH = new MySQli($host, $user, $pass);
}
public function doSOmething() {
$this->DBH->foo();
}
}
这封装了你的一切.所有数据库访问将通过一个类,所以您不需要担心全局变量访问或其他任何事情.
5.使用预构建的类/框架
这是最好的选择,因为你不需要担心自己做.
数据库访问类:
完整框架:
真的,选择是无止境的.找到你喜欢的东西,并坚持下去.真的会让你的生活更轻松
祝你好运!