Функция для захвата всех ошибок MySQL?

0

Есть ли у кого-нибудь функция PHP, которая, например, если существует mysql_error() из-за ошибки MySQL, она не выведет ее?

Не выводя его, я имею в виду, скорее, это не показывает ошибку на живом сайте, поскольку я буду использовать ее с другой функцией, которая у меня будет, если бы у меня была функция ошибки MySQL.

Я просто нахожу это настолько раздражающим, что я делаю это сейчас:

$q = mysql_query("SELECT * FROM something");

// if error occurs
if(!$q) {
   echo 'Error' . mysql_error();
} else {
  // else no errors so continue
}

На некоторых моих веб-страницах видно, что у меня есть несколько запросов в script, и я хотел бы просто включить функцию в нижней части всего моего PHP-кода, и если ошибка MySQL возникает где-нибудь в моем script для функции, чтобы поймать ошибку вместо того, чтобы я делал кратные коду, указанному выше.

Таким образом, я могу сэкономить много ненужной работы и реализовать ее с помощью функции электронной почты.

  • 1
    Я не могу дождаться появления ошибки базы данных, которую нужно отладить, потому что страница загружается, но данных нет ...
  • 0
    Я сомневаюсь, что код прошел бы токенизатор - вам не хватает точки (для конкатенации строки и mysql_error() return)
Показать ещё 1 комментарий
Теги:
function

4 ответа

1
Лучший ответ

Наиболее надежным решением является использование trigger_error(). Таким образом, вы можете связать себя с системой обработки ошибок PHP, которая уже готова работать с средами разработки и производства.

$querySql = 'SELECT * FROM `foo`';
$queryResult = mysql_query($querySql);

if (!$queryResult) {
    trigger_error('Unable to execute query: ' . $querySql, E_USER_NOTICE);
}

Конечно, самым удобным было бы сделать функцию украшения для mysql_query(), которая автоматически вызвала ошибку. Принцип DRY всегда применяется.

  • 0
    Привет, E_USER_NOTICE, что это? для меня это ново, плюс trigger_error никогда раньше об этом не слышал. Спасибо
  • 0
    Кроме того, чтобы добавить к вышесказанному, отображает ли это сообщение об ошибке, но ошибка, которая не раскрывает и информацию о базе данных и т. д., что, очевидно, хорошо на живом сайте, чтобы не выдавать информацию о запросе и т. д., или я ошибаюсь это?
Показать ещё 3 комментария
3

Один из способов - написать свою собственную функцию, например sql_query, которая выглядит примерно так:

function sql_query($sql) {
    $q = mysql_query($sql);
    // if error occurs
    if(!$q) {
       //your error handling code
    } else {
       return $q;
    }
}

Затем вы используете эту функцию везде, где хотите выполнить запрос sql.

Гораздо лучший способ - использовать PDO и исключения и т.д. в этом.

  • 0
    PDO? не уверен о чем ты. Это похоже на то, что я ищу, спасибо, Джордс :) Думаю, я бы использовал это следующим образом: переменная sql_query ($ sql) $ sql - это мой код, который требует запросов? и если он потерпит неудачу, он, очевидно, сделает мой код обработки ошибок
  • 0
    Да уж. PDO - это объекты данных php - Google PDO Google, и вы найдете его. Это довольно хороший уровень абстракции БД, и вы можете использовать исключения, чтобы лучше справляться с подобными вещами, и вы также получаете подготовленные операторы, которые очень хороши.
1

Создайте или используйте слой абстракции DB.

Используйте Исключения и поймайте их все. Затем у вас есть "настройка", чтобы включать или выключать отображение ошибок или еще лучше, записать их в файл.

0

Я думаю, что не понимаю, что вам нужно.

Если вы хотите "скрыть" ошибку при печати на странице, вы можете использовать префикс '@':

$q = @mysql_query ( "SELECT * FROM что-то" );

С "@" ошибки подавляются конечному пользователю.

  • 1
    Подавления ошибок следует избегать! Вы должны решить проблему, а не скрывать ее.
  • 0
    Ошибки могут быть вызваны ошибкой, которая не относится к самому запросу, например синтаксические ошибки. Также не следует отображать их на действующем сайте, так как он может раскрыть много информации, особенно злоумышленнику, поэтому я и сказал об интеграции с моей функцией ошибки электронной почты, так что я буду уведомлен о точной ошибке, но пользователь получит ошибку что вы указываете.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню