Могу ли я задать фундаментальный вопрос. Почему, когда я пытаюсь создать новый объект mysqli в php с недопустимой информацией о базе данных (например, неправильное имя базы данных), она не возвращает ошибку постоянно? Я обычно программирую серверные вещи на Java, и что-то вроде этого отбросит провал ошибки, а не через 20 секунд или около того.
Например
$conn = new mysqli($host, $username, $password, $database);
Спасибо!
Если хост, имя пользователя и пароль верны, неправильное имя базы данных будет немедленно возвращено. Однако, если у вас неправильное имя узла, попытка подключения сначала должна быть таймаутом. Неправильные ошибки имени пользователя и пароля также возвращаются немедленно.
Это потому, что запрос недействителен, поскольку важные учетные данные отсутствуют или неверны; или что база данных недоступна.
Если имя хоста, имя пользователя и/или пароль неверны, запрос SQL будет иметь тайм-аут, прежде чем он сможет вернуться. Время стандартного тайм-аута в PHP устанавливается, по-моему, 20 секунд, поэтому оно будет хорошо соответствовать тому, что вы испытываете. Хотя это не произойдет с недопустимым именем базы данных, так как это просто приведет к немедленному сбою запроса.
Чтобы проверить наличие ошибки, вы можете вызвать mysql_error()
, чтобы получить спецификацию ошибки с PHP или mysql_errno()
, чтобы получить только код ошибки. Стандартное время таймаута можно установить на меньшее значение, отредактировав файл php.ini(если у вас есть к нему доступ); установите значение, за которым следует mysql.connect_timeout
(то есть, в php.ini), в любое время, которое вы хотите, в секундах. В нормальных ситуациях время ожидания 5 секунд и более хорошее, возможно, даже неоправданно большое.