Почему драйвер Codeigniters msqli возвращает null в качестве результата запроса, в то время как драйвер mysql выполняет запрос очень хорошо? - PullRequest
1 голос
/ 29 декабря 2010

Я на управляемом сервере с 1 и 1, и я использую хранимые процедуры в моем текущем проекте. Для этого я должен использовать MySQL в качестве драйвера базы данных.

1and1 хочет установить сокет для соединений с базой данных, в зависимости от того, использую ли я mysql (который является /tmp/mysql5.sock) или mysqli (/tmp/mysqld.sock).

Когда я настраиваю свой database.php для использования драйвера mysqli и имени хоста с соответствующим сокетом, мои запросы не будут выполнены, и я получу следующий ответ в качестве объекта результата.

объект (CI_DB_mysqli_result) # 17 (7) {

["conn_id"] => bool (false)

["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) Кажется, что соединение с базой данных вообще отсутствует, я прав? Как мне получить соединения mysqli для работы с 1and1 в Codeigniter?

@ 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 Ответ

1 голос
/ 29 декабря 2010

Хорошо, короче говоря, драйвер mysqli от codeigniter не поддерживает работу с сокетами.Или, по крайней мере, я не мог найти правильную настройку для этого.

Я добавил параметр в класс драйвера и теперь он работает.

в /System/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 сообщит мне, что default_socket для mysqli - это не mysql5.sock, он работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...