|
|
|
| Если скрипт делает запрос к базе, а MySQL в ответ выведет сообщение об
ошибке, то как дальше будет действовать скрипт? Он аварийно завершит
работу? Как обрабатывать сообщения об ошибках? | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: cheops
(21.04.2005 в 12:22)
| | а как это сделать на Perl??????????????? | |
|
|
|
|
|
|
|
для: 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-ориентированный :))) | |
|
|
|
|
|
|
|
для: cheops
(21.04.2005 в 12:39)
| | да я знаю что PHP-ориентированный, просто не нашел форума лучше этого.
Я только не все понял:
1. что это за параметры при открытии базы: {PrintError => 1, RaiseError => 1}
2. что такое "or die"?
3. как поведет себя скрипт если я не вставлю "or die"?
Заранее благодарю! | |
|
|
|
|
|
|
|
для: 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 истинен, то второй даже не вычисляется, так как выражение уже истино не зависиом от значения во стором аргументе. А вот если оно ложно, то второй аргумент нужно вычислять, так как заранее нельзя сказать какое значение примет всё выражение. Поэтому если первая функция отрабатывает нормально die управление не передаётся, а вот если сбой - вызывается функция die.
Это несколько неожиданный стиль программирования и очень Perl-овый, для этого языка характерны такие штучки. Хакерский стиль (в первоначальном понимании этого слова).
3) Ничего не произойдёт, просто в случае ошибки в SQL-запросе не произойдёт вызов die(). | |
|
|
|