【发布时间】:2013-10-03 06:45:32
【问题描述】:
您好,我对 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;
}
}
我不明白的是,即使主机是本地主机,它也找不到主机。 当我尝试更改线路时: 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
)
我错过了什么吗?感谢您的宝贵时间。
【问题讨论】:
-
检查你的 $read 数组
-
我认为你不应该这样进行配置!看看这个问题stackoverflow.com/questions/3996475/…
-
嗯,我不明白我的代码是什么配置?实际上它只是读取一个简单的文本文件,其中写入了 localhost 用户名密码和数据库的名称,仅此而已。我只是不明白为什么 $localhost, $username ,$password 会失败,就好像它读取垃圾信一样,而数据库不是?是的,我会转储数组的内容,看看有什么失败。我能感觉到这可能是问题所在,因为 $db 是最后一个从文件中读取的。我这样做是为了了解 PHP 类是如何工作的,只是碰巧我在数据库连接上尝试过。
-
@NeonWarge 在您发布输出时,可以清楚地看到文本有 1 个额外的空间,因此请使用
trim($localhost),etc...。 -
很好用!所以我不喜欢在阅读时修剪,有没有办法逐行阅读而不包括额外的'\ n'。在我的代码中,它将新行读取为空格。很奇怪。