Обрабатывая ответ yasaluyari
, я бы придерживался чего-то вроде этого:
Мы можем просто изменить наш mysql_query следующим образом:
function mysql_catchquery($query,$emsg='Error submitting the query'){
if ($result=mysql_query($query)) return $result;
else throw new Exception($emsg);
}
Теперь мы можем просто использовать его вот так, хороший пример:
try {
mysql_catchquery('CREATE TEMPORARY TABLE a (ID int(6))');
mysql_catchquery('insert into a values(666),(418),(93)');
mysql_catchquery('insert into b(ID, name) select a.ID, c.name from a join c on a.ID=c.ID');
$result=mysql_catchquery('select * from d where ID=7777777');
while ($tmp=mysql_fetch_assoc($result)) { ... }
} catch (Exception $e) {
echo $e->getMessage();
}
Обратите внимание, как это красиво. Всякий раз, когда какой-либо из qq терпит неудачу, мы исправляем ошибки. И вы также можете заметить, что нам теперь не нужно сохранять состояние запросов на запись в переменную $result
для проверки, потому что наша функция теперь обрабатывает ее сама. И так же, как он обрабатывает выборки, он просто присваивает результат переменной, как и обычная функция, но обрабатывает ошибки внутри себя.
Также обратите внимание, нам не нужно показывать фактические ошибки, поскольку они несут огромный риск для безопасности, особенно с этим устаревшим расширением. Вот почему наш дефолт будет в большинстве случаев нормальным. Тем не менее, если мы хотим уведомить пользователя о какой-то конкретной ошибке запроса, мы всегда можем передать второй параметр, чтобы отобразить наше пользовательское сообщение об ошибке.