Обработка ошибок MySQL в PHP

263
21 декабря 2016, 01:48

Здравствуйте. В разных частях моего php-скрипта я выполняю запросы к БД MySQL. Как обезопасить эти запросы, чтобы например если произошел тайм-аут подключения к MySQL серверу, происходило переподключение, вместо того, чтобы падал весь скрипт? Окружение каждого запроса к БД кодом вида

set_error_handler("mysqlErrorsHandler", E_ALL);
mysql_query($d, $query);
restore_error_handler();

повлечет за собой огромное добавление дублируемого кода - что явно плохо. Как можно решить проблему изящно?

P.S. Примерные ожидаемые ошибки известны - "MySQL Server has gone away" и "Error while sending QUERY packet", при их возникновении просто делать переподключение. Хотя, конечно же, хотелось бы обеспечить безопасность от любых ошибок.

UPD: Написал такую функцию:

function safe_query(&$d, $query){
    if(mysqli_ping($d)===true){
        return mysqli_query($d, $query);
    }else{
        mysqli_close($d);
        $d = mysqli_connect('localhost', 'root', '');
        if(mysqli_ping($d)===true)
            return mysqli_query($d, $query);
        else
            return false;
    }
}

Это нормальное решение?

Answer 1

Как вариант

  <?php
     $connection = mysql_connect('localhost','user','pass');
     mysql_select_db('db',$conn);
     if (! mysqli_ping ($connection)) { .... 
     mysql_close($conn);
     $conn = connection('localhost','user','pass');
     mysql_select_db('db',$conn);
     }
   ?>

Или написать класс для работы с БД который будет реализовывать нечто подобное. Cсылка на документацию

READ ALSO
Подсчитать кол-во записей в каждой категории

Подсчитать кол-во записей в каждой категории

ЗдравствуйтеТребуется на сайте произвести подсчет, сколько записей находится в каждой категории, а так же подсчитать общее кол-во всех записей

251
SQL to json converting

SQL to json converting

У меня есть table на котором есть большая информация, мне нужно написать SELECT * FROM table, так чтобы SELECT возвращал меня информацию на JSON формате, например...

312
Как достать переменные из URL?

Как достать переменные из URL?

Добрый деньПишу интернет магазин, по одному курсу, который нашел на просторах интернета

277