Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как реагирует скрипт когда MySQL выдает ошибку?
 
 автор: begin   (21.04.2005 в 09:42)   письмо автору
 
 

Если скрипт делает запрос к базе, а MySQL в ответ выведет сообщение об
ошибке, то как дальше будет действовать скрипт? Он аварийно завершит
работу? Как обрабатывать сообщения об ошибках?

   
 
 автор: cheops   (21.04.2005 в 12:22)   письмо автору
 
   для: begin   (21.04.2005 в 09:42)
 

Если ошибка не обрабатана, например так
<?php
  mysql_query
("Абра-кадабра");
?>

то скрипт этого даже не заметит, для контроля за выполнением SQL-запроса следует обработать ошибку
<?php
  
// Выполняем SQL-запрос
  
$fd mysql_query("SELECT * FROM tbl;");
  
// Обрабатываем ошибку
  
if(!$fd)
  {
     
// Останавливаем работу скрипта с выводом ошибки
     // от сервера MySQL
     
exit("Ошибка - ".mysql_error());
  }
?>

Функция mysql_error() возвращает последенее сообщение об ошибке от сервера. Подробнее почитать о функциях MySQL и примерах работы с ними можно в нашем справочнике.

http://www.softtime.ru/group/id_group=2

   
 
 автор: begin   (21.04.2005 в 12:27)   письмо автору
 
   для: cheops   (21.04.2005 в 12:22)
 

а как это сделать на Perl???????????????

   
 
 автор: cheops   (21.04.2005 в 12:39)   письмо автору
 
   для: begin   (21.04.2005 в 12:27)
 

Примерно так
use DBI;
# Устанавливаем соединение с базой данных
$dbh = DBI->connect("DBI:mysql:host=localhost;database=base",
                    "user", "password",
                    {PrintError => 1, RaiseError => 1});
# Формируем SQL-запрос
$sth = $dbh->prepare("SELECT * FROM tbl");
# Выполняем SQL-запрос и контролируем его на ошибки
$sth->execute() or die("Ошибка при выполнении SQL-запроса");


PS Хм... вы бы сразу сказали что это Perl, форум-то в основном PHP-ориентированный :)))

   
 
 автор: begin   (21.04.2005 в 15:18)   письмо автору
 
   для: cheops   (21.04.2005 в 12:39)
 

да я знаю что PHP-ориентированный, просто не нашел форума лучше этого.
Я только не все понял:
1. что это за параметры при открытии базы: {PrintError => 1, RaiseError => 1}
2. что такое "or die"?
3. как поведет себя скрипт если я не вставлю "or die"?
Заранее благодарю!

   
 
 автор: cheops   (21.04.2005 в 23:21)   письмо автору
 
   для: begin   (21.04.2005 в 15:18)
 

1) Это структура управляющая обработкой ошибок в модуле DBI. Так PrintError => 1 означает, что следует выводить ошибки, возникающие при работе с MySQL, а RaiseError => 1 не только выводить, но и останавливать выполнение скрипта (после отладки это следует всё занулить)
2) die() - это функция Perl, аналогичная exit() в PHP, она останавливает работу скрипта и выводит сообщение, которое передано ей в качестве параметра. Так как любая функция в Perl или в PHP возращает либо положительный истинный контектс (1, true, не пустая строка) либо ложный (0, false, пустая строка), то из них можно составлять логические конструкции
функция or функция1

Во всех языках используется ленивое вычисление, т.е. если первый аргумент or истинен, то второй даже не вычисляется, так как выражение уже истино не зависиом от значения во стором аргументе. А вот если оно ложно, то второй аргумент нужно вычислять, так как заранее нельзя сказать какое значение примет всё выражение. Поэтому если первая функция отрабатывает нормально die управление не передаётся, а вот если сбой - вызывается функция die.
Это несколько неожиданный стиль программирования и очень Perl-овый, для этого языка характерны такие штучки. Хакерский стиль (в первоначальном понимании этого слова).
3) Ничего не произойдёт, просто в случае ошибки в SQL-запросе не произойдёт вызов die().

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования