Есть ли способ поймать ошибки MySQL и базы данных в PHP? - PullRequest
9 голосов
/ 25 мая 2011

Иногда я получаю ошибку базы данных, такую ​​как

Предупреждение: mysql_connect () [function.mysql-connect]: доступ запрещен для пользователя 'test'@'101.190.193.83' (с использованием пароля:ДА)

Не удалось подключиться: доступ запрещен для пользователя 'test'@'101.190.193.83' (с использованием пароля: ДА) "

Но на самом деле в пароле нет изменений.

Есть ли способ зафиксировать эту ошибку в файле журнала и показать на экране какое-нибудь приятное сообщение, например "Ошибка сервера.Пожалуйста, попробуйте еще раз. "

Ответы [ 5 ]

11 голосов
/ 25 мая 2011

Если вы не хотите, чтобы 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();
}
3 голосов
/ 25 мая 2011

Есть ли способ зафиксировать эти ошибки в файле журнала ...?

Да. Все ошибки и предупреждения PHP записываются в файл журнала ошибок веб-сервера, поэтому вам больше ничего не нужно делать - это уже делается.

Чтобы ответить на вторую часть вашего вопроса, если вы не хотите, чтобы на экране отображалось необработанное сообщение об ошибке, вы можете предотвратить это одним из двух способов:

  1. Используйте символ @ перед вызовом функции - то есть $db = @mysql_connect(...);. Это отключит отчеты об ошибках только для этого конкретного вызова функции. Обычно считается плохой идеей чрезмерно использовать эту технику, но иногда это допустимо.

  2. Лучшим вариантом может быть отключение глобального флага сообщения об ошибках, либо в вашем PHP.ini, в локальном файле .htaccess, либо с помощью ini_set() в программе.

Как правило, отчеты об ошибках на веб-странице должны использоваться только при разработке сайта. Как только сайт заработает, вы должны включить отчёт об ошибках, чтобы не было ошибок PHP, появляющихся в случайных местах на вашем тщательно сконструированном макете страницы перед вашими клиентами. Все возникшие ошибки будут по-прежнему записываться в журнал ошибок сервера, но не будут отображаться на странице.

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

3 голосов
/ 25 мая 2011
<?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 голос
/ 07 мая 2014

Источник: 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);
?>
0 голосов
/ 18 апреля 2014
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.';
}
...