我有以下问题,花了我最后几个小时......
我有一个mysqli连接类:
class database extends SplObjectStorage{
private $db_link;
public function __construct($MySQLi_DB){
if(!file_exists($_SERVER["HOME"].'/'.(substr($_SERVER['PHP_SELF'], 1, strpos(substr($_SERVER['PHP_SELF'], 1),'/'))).'/includes/mysqli.inc.php')){
echo "MySQLi Include Datei nicht vorhanden";
}else{
if (!$this->create_connection($MySQLi_DB) == true){
echo "Error creating Database. Parameter '".$MySQLi_DB."' unknown<br><br>";
}
}
}
public function query($query){
Return $this->db_link->query($query);
}
public function close(){
mysqli_close($this->db_link);
}
private function create_connection($MySQLi_DB){
include_once($_SERVER["HOME"].'/'.(substr($_SERVER['PHP_SELF'], 1, strpos(substr($_SERVER['PHP_SELF'], 1),'/'))).'/includes/mysqli.inc.php');
$this->db_link = new mysqli($MySQLi_Host, $MySQLi_User, $MySQLi_Passw, $MySQLi_Praefix.$MySQLi_DB);
$this->attach($this->db_link);
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQLi: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
return false;
}else{
return true;
}
echo $mysqli->host_info . "\n";
}
构造函数通过查找包含所有连接数据(如user,pwd等)的包含文件来初始化类。
虽然它接收一个类似于databasename的参数($ MySQLi_DB)。
当我用这个命令调用这个类时:
$SSO_DB = new database('SSO');
这个课程很好。
更改参数执行另一个数据库名称是没有问题的。
例如:$Social_DB = new database('social');
在我在同一页面上调用我班级的两个实例之前,这甚至没有问题!
e.g:
$SSO_DB = new database('SSO');
$Social_DB = new database('social');
返回此错误: 警告:mysqli :: mysqli():( HY000 / 1044):用户访问被拒绝&#39;&#39; localhost&#39;到数据库&#39; social&#39;在第41行的/volume1/web/portal/classes/database.class.php
第41行是:
$this->db_link = new mysqli($MySQLi_Host, $MySQLi_User, $MySQLi_Passw, $MySQLi_Praefix.$MySQLi_DB);
当我删除其中一个classcalls时没有错误。 无论我删除哪个电话......
有什么想法吗?
答案 0 :(得分:0)
将include_once()更改为include()解决了问题! php似乎存储了在一个页面上调用类的频率,并且第二次没有包含该文件。