Иногда я получаю ошибку базы данных, например
Предупреждение: mysql_connect () [function.mysql-connect]: доступ запрещен для пользователя 'test'@'101.190.193.83' (с использованием пароля: YES)
- phpMyAdmin Доступ запрещен
- мое соединение pdo не работает
- Ошибка # 1045 Доступ запрещен в PhpMyAdmin
- Ошибка MySQL 1045 Access Denied
- Phpseclib подключает сервер MYSQL
- доступ запрещен для пользователя «root» @ localhost mysql error 1045
Не удалось подключиться: доступ запрещен для пользователя 'test'@'101.190.193.83' (с использованием пароля: YES) "
Но по правде говоря, никаких изменений в пароле нет.
Есть ли способ зафиксировать эту ошибку в файле журнала и показать на экране какое-то приятное сообщение, например «Ошибка сервера. Повторите попытку через некоторое время».
Если вы не хотите, чтобы 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(); }
<?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'; } ?>
Есть ли способ захватить эту ошибку в файл журнала …?
Да. Все ошибки и предупреждения PHP записываются в файл журнала ошибок веб-сервера, поэтому вам больше нечего делать – это уже делается.
Чтобы ответить на вторую часть вашего вопроса, если вы не хотите, чтобы на экране отображалось необработанное сообщение об ошибке, вы можете предотвратить это одним из двух способов:
Используйте символ @
перед вызовом функции – т.е. $db = @mysql_connect(...);
, Это отключит отчет об ошибках только для этого специального вызова функции. Обычно считается плохой идеей чрезмерно использовать эту технику, но иногда это бывает законно.
Лучшим вариантом может быть PHP.ini
глобального отчета об ошибках, либо в ваш PHP.ini
, в ваш локальный файл .htaccess
, либо с помощью ini_set()
внутри программы.
Как правило, отчет об ошибках на веб-странице должен использоваться только при разработке сайта. После того, как сайт будет работать вживую, вы должны повернуть отчет об ошибках, чтобы у вас не возникало ошибок PHP, возникающих в случайных местах в тщательно продуманном макете страницы перед вашими клиентами. Любые ошибки, которые происходят, все равно будут записаны в журнал ошибок сервера, но не будут отображаться на странице.
Для ошибок MySQL, таких как тот, который у вас есть, вы все равно можете получить ошибку в программе, используя mysql_error()
. Это будет содержать информацию о последней ошибке, чтобы выполнить, поэтому вы можете программно проверить ее и сообщить о разумном сообщении об ошибке.
Источник: 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); ?>
в<?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); ?>
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.'; }