MySQL 在传递$variables $PHP时无法连接


MySQL failed to connect when passing $variables $PHP

你好,我特别不熟悉PHP编程,所以这是我的问题。

我有一个名为"连接"的类。我只是想创建一个连接类,我可以在其中实例化并立即获得连接,我也不想每次连接到数据库时都填写本地主机用户名、密码、数据库,所以我做了这个非常简单的类:

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抛出一个错误,即使主机是本地主机,也没有找到这样的主机。但是当我尝试插入除第 4 个参数之外的实际参数时,它可以工作。

Connkey.txt包含这些字符串

    localhost
    root
    password123
    virtualassistant

print_r打印出结果

数组 ( [0] =>本地主机

    [1] => root
    [2] => password123
    [3] => virtualassistant
)

我错过了什么吗?谢谢你的时间。

写如下

$con = new Connection();
$con->connect('localhost','username','password','database_name');

尝试在连接函数中回显,无论您是否获得这些传递的变量值。这些应该适合您。如果成功连接,则在连接函数中将变量 $_isConnected 的值设置为 true。

我认为,您未能正确读取配置文件。 以下链接描述了从配置文件读取数据的各种方法。

http://www.phpro.org/articles/Application-Configuration.html

例如:

创建一个名为">config.ini"或其他文件的文件。

将以下内容放入文件:

[database]
db_username = virtualassistant
db_password = password123
db_host = localhost
db_name = test

现在,从你的PHP脚本:

<?php
/*** parse the ini file ***/
    $config = parse_ini_file("config.ini", 1);
    /*** print the array ***/
    print_r($config);

您将收到如下所示的数组:

Array
    (
        [database] => Array
        (
            [db_username] => virtualassistant
            [db_password] => password123
            [db_host] => localhost
            [db_name] => test
        )
)

简单...:)

因此,根据Yogesh Suthar的说法,他注意到除了第四个参数之外,每个参数都有一个额外的空间。这是因为我逐行阅读此文本文件,以便每个参数都用换行符分隔,因此当我阅读该行时,它将该换行符转换为空格,我之所以这样说,是因为我的var_dump结果。我的说法可能是错误的,但这会导致问题。第四个参数不再分离,因为下一个参数已经是 EOF,因此它没有额外的空间。我没有怀疑过。所以现在我尝试按照建议使用 trim( $val( 每个参数进行修剪,它可以工作!谢谢你们!你真厉害!