为什么Codeigniters msqli驱动程序返回null作为查询结果,而mysql驱动程序执行查询就好了?

时间:2010-12-28 21:44:36

标签: php codeigniter mysqli

我在1and1的托管服务器上,我在我当前的Project中使用存储过程。为此,我必须使用mysqli作为数据库驱动程序。

1and1想要为数据库连接设置套接字,这取决于我使用mysql(即/tmp/mysql5.sock)还是mysqli(/tmp/mysqld.sock)。

当我设置我的database.php以使用mysqli驱动程序和主机名与相应的套接字时,我的查询将失败,我得到以下响应作为结果对象。

  

对象(CI_DB_mysqli_result)#17(7){

     

[ “conn_id”] =>布尔(假)

     

[ “result_id”] => NULL

     

[ “result_array”] => array(0){}

     

[ “result_object”] => array(0){}

     

[ “CURRENT_ROW”] => INT(0)

     

[ “NUM_ROWS”] => NULL

     

[ “ROW_DATA”] => NULL

     

}

我检查了我的phpinfo,它告诉我,mysqli已加载,其参数“default_socket”为“/tmp/mysqld.sock”。

我错过了什么?

["conn_id"]=> bool(false)似乎根本没有数据库连接,对不对?如何在Codeigniter中使用mysqli连接与1and1一起使用?

@edit:这是我尝试执行的查询之一:

function getStreetByReference ( $plz)
{

    $query = $this->db->query("SELECT strasse from dwh_strassen WHERE dwh_strassen.PLZ =  '$plz' GROUP BY dwh_strassen.strasse");
    $temp_result = array();
    foreach ( $query->result_array() as $row )
    {
         $temp_result [] = $row;
    }
    return $temp_result;
}

1 个答案:

答案 0 :(得分:1)

好吧,长话短说,来自codeigniter的mysqli驱动程序不支持使用套接字。或者至少我找不到合适的设置。

我在驱动程序类中添加了参数,现在它可以正常工作。

/ pystem/database/drivers/mysqli_driver.php

中的

if ($this->port != '')
        {
            return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database, $this->port, $this->socket); // $this->socket is new, i've added the same variable in my database.php
        }
        else
        {
            return @mysqli_connect($this->hostname, $this->username, $this->password, $this->database);
        }

和/application/config/database.php

$db['live']['socket'] = "/tmp/mysql5.sock";

多数民众赞成所有人都有。我做了一些测试,即使phpinfo告诉我,mysqli的default_socket也不是mysql5.sock,它的工作正常。