Тестирование php / mysqli-соединения - PullRequest
7 голосов
/ 09 сентября 2010

Я ищу способ проверить только часть соединения php / mysqli.Я перехожу с LAMP-сервера на Vista на тот же на Ubuntu, и у меня все получается, чтобы MySQL работал.Я знаю, что все нужные модули установлены, и PhpMyAdmin работает безупречно.Я перенес сайт снова, и ни одно из соединений mysqli не работает.Я получаю сообщение об ошибке «вызов функции-члена xxx () для необъекта», которая обычно появляется, когда либо сам запрос неверен, либо запрос подготовлен из-за плохого соединения.Я знаю, что сам запрос хорош, потому что он отлично работает на другом сервере с точно такой же структурой базы данных и данными.Это оставляет меня со связью.Я попытался написать очень простое тестовое соединение и поместить его в цикл, такой как ..

if(***connection here ***)
{ echo "connected"; }
else
{ echo "not connected"; }

Это перекликается с «подключением», и это здорово.Но просто чтобы проверить, я изменил пароль в соединении, чтобы я знал, что он не сможет подключиться, и он все еще отражал "подключено".Таким образом, тест if / else явно не подходит ...

Ответы [ 3 ]

15 голосов
/ 09 сентября 2010

mysqli_connect () всегда возвращает объект MySQLi. Чтобы проверить наличие ошибок подключения, используйте:

$mysqli_connection = new MySQLi('localhost', 'user', 'pass', 'db');
if ($mysqli_connection->connect_error) {
   echo "Not connected, error: " . $mysqli_connection->connect_error;
}
else {
   echo "Connected.";
}
2 голосов
/ 02 марта 2018

Для проверки php-соединения в вашем терминале выполните:

$ php -r 'var_dump(mysqli_connect("localhost:/tmp/mysql.sock", "MYSQL_USER", "MYSQL_PASS",
     "DBNAME));'
0 голосов
/ 09 сентября 2010

Тогда вам нужно больше обрабатывать ошибки при различных вызовах базы данных.Быстрый / грязный метод состоит в том, чтобы просто сделать

 $whatever = mysqli_somefunction(...) or die("MySQL error: ". mysqli_error());

Все функции возвращают логическое значение FALSE, если произошла ошибка, или соответствующий объект mysqli с результатами.Без проверки ошибок вы бы сделали:

 $result = $mysqli->query("blah blah will cause a syntax error");
 $data = $result->fetchRow();  // $result is "FALSE", not a mysqli_object, hence the "call to member on non-object"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...