我在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;
}
答案 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,它的工作正常。