您好,我对 PHP 编程特别陌生,所以这是我的问题。
我有一个名为 Connection 的类。我只是想创建一个连接类,我可以在其中实例化并立即获得连接,而且我不想每次连接到数据库时都填写本地主机用户名、密码、数据库,所以我制作了这个非常简单的类:
class Connection
{
private $mysqli;
private $filehandle;
private $_isConnected;
private $_isFileLoaded;
public function __construct( $filename )
{
$_isFileLoaded = $this->loadKeyFromFile( $filename );
}
public function __destruct()
{
if( $this->_isConnected )
mysqli_close( $this->mysqli );
}
public function getConnection()
{
return ( $this->_isConnected )? $this->mysqli : false;
}
public function isFileLoaded()
{
return $this->_isFileLoaded;
}
public function isConnected()
{
return $this->_isConnected;
}
private function loadKeyFromFile( $filename )
{
if( !file_exists( $filename ) )
return false;
$filehandle = fopen( $filename , 'r' );
$read = array();
while( $line = fgets( $filehandle ) )
{
$read[] = $line;
}
fclose( $filehandle );
if( count( $read ) == 4 )
{
$localhost = $read[ 0 ];
$username = $read[ 1 ];
$password = $read[ 2 ];
$database = $read[ 3 ];
$this->_isConnected = $this->connect( $localhost ,$username , $password , $database );
return true;
}
else
return false;
}
private function connect($host , $user , $pass , $db )
{
$this->mysqli = mysqli_connect( $host , $user , $pass , $db ) or die( "Database connection failed : " . mysqli_connect_error() );
return ( true )? true : false;
}
}
我不明白的是,即使主机是 localhost,它也找不到主机。当我尝试更改行时: mysqli_connect( 'localhost' , $user , $pass , $db );
它就像一个魅力!似乎它无法读取 $host 变量,我也有与 $user 和 $pass 相同的问题。在 $db 上我没有问题,它可以简单地读取我想要选择的数据库的名称。我已经检查了 $host $user 和 $pass 在他们的本地范围内的值,当他们第一次在函数 loadKeyFromFile() 中被读取时,它们似乎包含我真正需要的值来启动一个我只是不明白的连接这就是数据库无法检测到它的原因。我也尝试用“”包装这些变量,但仍然没有运气。
我很困惑。我不知道如何解决这个问题。典型的错误,你知道的,我什至不认为我必须发布它。mysqli_connect 抛出一个错误,即使主机是 localhost,也没有找到这样的主机。但是当我尝试插入除第 4 个参数之外的实际参数时,它可以工作。
connkey.txt 包含这些字符串
localhost
root
password123
virtualassistant
print_r 打印出结果
数组( [0] => 本地主机
[1] => root
[2] => password123
[3] => virtualassistant
)
我错过了什么吗?谢谢你的时间。