#php #mysql #error-handling #mysql-error-1045
#php #mysql #обработка ошибок #mysql-ошибка-1045
Вопрос:
Иногда я получаю ошибку базы данных типа
Предупреждение: mysql_connect() [function.mysql-connect]: доступ запрещен для пользователя ‘test’ @’101.190.193.83′ (с использованием пароля: ДА)
Не удалось подключиться: доступ запрещен для пользователя ‘test’ @’101.190.193.83′ (используя пароль: ДА) «
Но на самом деле пароль не изменился.
Есть ли какой-нибудь способ записать эту ошибку в файл журнала и отобразить на экране какое-нибудь приятное сообщение, например «Ошибка сервера. Пожалуйста, попробуйте еще раз как-нибудь.»
Комментарии:
1. На самом деле я работаю над проектом с открытым исходным кодом, чтобы перехватывать ошибки, отображать приятное сообщение на экране и регистрировать их с гораздо большим количеством информации, чем предоставляет стандартный журнал ошибок. jarofgreen.co.uk/2011/01/tracking-errors-with-php или elastik.sf.net
Ответ №1:
Если вы не хотите, чтобы PHP отображал предупреждение, вы должны использовать оператор «@»
$connect = @mysql_connect(HOST, USER, PASS);//won't display the warning if any.
if (!$connect) { echo 'Server error. Please try again sometime. CON'; }
Вы также можете рассмотреть возможность установки для display_errors значения 0 в вашем php.ini
файле в рабочей среде
Вы также можете рассмотреть PDO для подключения к MySQL, он использует исключения по умолчанию для сообщения об ошибках,
try {
$dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Could not connect : ' . $e->getMessage();
}
Ответ №2:
<?php
$connect = mysql_connect(HOST, USER, PASS);
if(!$connect) { echo 'Server error. Please try again sometime. CON'; }
$select_db = mysql_select_db(DATABASE);
if(!$select_db) { echo 'Server error. Please try again sometime. DB'; }
?>
Комментарии:
1. Форматирование отсутствует, по-видимому, stackoverflow его не распознает .. pastebin.com/EFefnNSp
2. Я исправил это за вас. Чтобы получить форматирование кода, поставьте 4 пробела (или 1 табуляцию) перед вашим кодом. Вы можете сделать это легко, выделив текст и нажав CTRL K.
Ответ №3:
Есть ли какой-либо способ зафиксировать эти ошибки в файле журнала …?
ДА. Все ошибки PHP и предупреждения записываются в файл журнала ошибок веб-сервера, поэтому вам больше ничего не нужно делать — это уже делается.
Отвечая на вторую часть вашего вопроса, если вы не хотите, чтобы на экране отображалось необработанное сообщение об ошибке, вы можете предотвратить это одним из двух способов:
-
Используйте
@
символ перед вызовом вашей функции — ie$db = @mysql_connect(...);
. Это отключит сообщение об ошибках только для этого конкретного вызова функции. Обычно считается плохой идеей чрезмерно использовать этот метод, но иногда это вполне допустимо. -
Лучшим вариантом может быть отключение флага глобального сообщения об ошибках либо в вашем
PHP.ini
, либо в вашем локальном.htaccess
файле, либо с помощьюini_set()
внутри программы.
Как правило, отчеты об ошибках на веб-странице следует использовать только во время разработки сайта. Как только сайт заработает, вам следует включить функцию отчетов об ошибках, чтобы ошибки PHP не появлялись в случайных местах вашего тщательно сконструированного макета страницы перед вашими клиентами. Любые возникающие ошибки все равно будут записаны в журнал ошибок сервера, но не будут отображаться на странице.
Для ошибок MySQL, таких как та, с которой вы столкнулись, вы все равно можете получить доступ к самой ошибке в программе с помощью mysql_error()
функции. Это будет содержать подробную информацию о последней возникшей ошибке, чтобы вы могли программно проверить ее и сообщить о разумном сообщении об ошибке.
Ответ №4:
Источник: http://wallstreetdeveloper.com/php-database-connection /
Вот пример кода для подключения к базе данных в php:
<?php
//Step-1 : Create a database connection
$connection=mysql_connect(“localhost”,”root”,”root”);
if(!$connection) {
die(“Database Connection error” . mysql_error());
}
//Step-2 : Select a database to use
$db=mysql_select_db(“widget_corp”,$connection);
if(!$db) {
die(“Database Selection error” . mysql_error());
}
?>
<html>
<head>
<title>Database</title>
</head>
<body>
<?php
//Step 3 : Perform database Queury
$result=mysql_query(“select * from subjects”,$connection);
if(!$result) {
die(“No rows Fetch” . mysql_error());
}
//Step 4 : Use returned data
while($row=mysql_fetch_array($result))
{
//echo $row[1].” “.$row[2].”<br>”;
echo $row["menu_name"].” “.$row["position"].”<br>”;
}
?>
</body>
</html>
<?php
//Step 5 : Close Connection
mysql_close($connection);
?>
Ответ №5:
try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// if your are not set this attributes you won't get any exceptions.
} catch (PDOException $e) {
echo 'Server error. Please try again some time.';
}