我遇到了以下问题,花了我最后几个小时。。。
我有一个用于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等)的include文件来初始化类。
它虽然接收到一个类似于数据库名称的参数($MySQLi_DB)。
当我用这个命令调用这个类时:
$SSO_DB = new database('SSO');
这门课很好。将参数更改为其他数据库名称是没有问题的。例如:$Social_DB = new database('social');
这甚至没有问题,直到我在同一页上调用我班的两个instanze!
例如:
$SSO_DB = new database('SSO');
$Social_DB = new database('social');
返回此错误:警告:mysqli::mysqli():(HY000/1044):拒绝用户'''localhost'访问第41行上/volume1/web/portal/classes/database.class.php中的数据库'social'
第41行是:
$this->db_link = new mysqli($MySQLi_Host, $MySQLi_User, $MySQLi_Passw, $MySQLi_Praefix.$MySQLi_DB);
当我删除其中一个类调用时没有错误。无论我删除哪个调用。。。
知道吗?
将includeonce()更改为include()解决了问题!php似乎存储了在一个页面上调用该类并且第二次没有包含该文件的频率。