2013-12-07 1 views
3

Я пытаюсь подключиться к базе данных с использованием значений по умолчанию для mysqli constructor, который документально быть:Использования значений по умолчанию для Mysqli конструктора не удается

  • хозяин = ini_get("mysqli.default_host")
  • имя пользователь = ini_get("mysqli.default_user")
  • passwd = ini_get("mysqli.default_pw")

Причина, по которой я хочу использовать настройки по умолчанию, поэтому я могу иметь учетные данные в файле конфигурации inst а также разбросаны по моему коду. Однако, когда я не передаю никаких значений, соединение выполняется успешно, но затем последующие запросы завершаются с ошибкой.

$db = new mysqli(); 
if ($db->connect_errno) die("Connect failed: " . $db->connect_error); 
if ($rs = $db->query("select user();") or die("Query failed: " . $db->error)) { 
    $row = $rs->fetch_row(); 
    echo $row[0]; 
    $rs->close(); 
} 

Это выходы:

Запрос не удалось:

Это означает, что соединение установлено, но любой запрос завершается с ошибкой. (Другие действия, такие как select_db, не в состоянии точно так же.)

Интересно, что я могу это исправить, изменив первую строку:

$db = new mysqli(ini_get("mysqli.default_host"), 
       ini_get("mysqli.default_user"), 
       ini_get("mysqli.default_pw")); 

... но я бы предпочел не должны введите значения по умолчанию везде, где мне нужно подключение к базе данных. Что я делаю не так? Есть ли способ использовать конструктор mysqli без аргументов?

ответ

3

Во время написания этого вопроса, я случайно прокрутить страницу документации и отметил следующее:

Примечание: Вызов конструктора без параметров такой же, как вызов mysqli_init().

Глядя вверх mysqli_init documentation, он говорит:

Примечание: Любые последующие вызовы любой функции Mysqli (кроме mysqli_options()) потерпит неудачу, пока mysqli_real_connect() не называлась.

Таким образом, исправление, чтобы изменить первую строку из:

$db = new mysqli(); 

To:

$db = new mysqli(); 
$db->real_connect(); 

Я бы ожидать в том случае, что mysqli_error вернулся бы что-то вроде «не подключен "вместо пустой строки. Это немного противоречиво, но, по крайней мере, оно несколько задокументировано.

Смежные вопросы