Forum Webscript.Ru

Программирование => PHP => Тема начата: Tepncuxopa от 28 Февраля 2002, 17:05:42

Название: Обработка неуспешного запроса к БД
Отправлено: Tepncuxopa от 28 Февраля 2002, 17:05:42
Мне нужно вывести сообщение в случае неуспешного запроса к базе данных. Деляю я это так:

$select="SELECT * FROM glossary WHERE word LIKE \'$word\'";
if (mysql_query($select)==0) {
 $query=mysql_query($select);
 $result=mysql_fetch_array($query);
 $title=$result[\'word\'];
 $text=$result[\'value\'];}
else {
 $title="

Данного термина пока нет в словаре. В ближайшее время он будет добавлен.";
 $text=\'\';}

Но что-то оно не работает :(
Название: Обработка неуспешного запроса к БД
Отправлено: fidget от 28 Февраля 2002, 17:51:35
Если у тебя неуспешный запрос к базе, то mysql_query() вернет тебе false от этого и крутись

mysql_query() returns TRUE on success and FALSE on error. A non-FALSE return value means that the query was legal and could be executed by the server. It does not indicate anything about the number of rows affected or returned. It is perfectly possible for a query to succeed but affect no rows or return no rows.
Название: Обработка неуспешного запроса к БД
Отправлено: Tepncuxopa от 28 Февраля 2002, 18:23:55
Вита, при успешном запросе функция mysql_query возвращает 0. Ненулевой результат указывает на ошибку, которую можно получить обратившись к mysql_error.
Конструкции с true и false я уже пробовала и так, и сяк, и в других разных позах, типа if (mysql_query($select)) или if (!mysql_query($select)).
Название: Обработка неуспешного запроса к БД
Отправлено: ThE0ReTiC от 28 Февраля 2002, 18:55:13
Проверь через mysql_num_rows eq 0
Название: Обработка неуспешного запроса к БД
Отправлено: Tepncuxopa от 28 Февраля 2002, 18:59:54
Заработало, только наверное это идеологически не правильный способ. Я сделала так:

$select="SELECT * FROM glossary WHERE word LIKE \'$word\'";
$query=mysql_query($select);
$result=mysql_fetch_array($query);
if ($result[\'word\']!=\'\') {
 $title=$result[\'word\'];
 $text=$result[\'value\'];}
else {
 $title="

Данного термина пока нет в словаре. В ближайшее время он будет добавлен.";
 $text=\'\';}
Название: Обработка неуспешного запроса к БД
Отправлено: fidget от 28 Февраля 2002, 19:11:05
Цитировать
Заработало, только наверное это идеологически не правильный способ. Я сделала так


так тебе не на успешность обращения к базе надо проверять, а на колличество полученых строк.
Название: Обработка неуспешного запроса к БД
Отправлено: Britva от 28 Февраля 2002, 19:49:05

$select="SELECT * FROM glossary WHERE word LIKE \'$word\'";
$qc  = mysql_query($select) ;

if(!$qc) {
   print \'ошибка!!!\';
   die();
}
if(@mysql_num_rows($qc) == 0) {
    $title = "

Данного термина пока нет в словаре. В ближайшее время он будет добавлен.";
} else {
    $rc=mysql_fetch_array($qc);
    $title=$rc[\'word\'];
    $text=$rc[\'value\'];
}
Название: Обработка неуспешного запроса к БД
Отправлено: FreeSpace от 28 Февраля 2002, 22:49:31
А почему бы не использовать для решения этой задачи mysql_error() и mysql_errno()?
Название: есессно можно, даже нужно :)
Отправлено: Britva от 28 Февраля 2002, 23:10:41
просто задача темы в том, чтобы узнать, был ли результат или нет (т.е. успешный запрос)
Название: Обработка неуспешного запроса к БД
Отправлено: Tepncuxopa от 01 Марта 2002, 14:25:27
2Britva: А в каком случае может выполниться условие:

if(!$qc) {
   print \'ошибка!!!\';
   die();
}

Я так понимаю, что если запрос был успешным, то в $result=mysql_fetch_array($select) что-то запишется, в противном случае она будет пустая. Поскольку поле word -- primary key, то по запросу я получу либо одну строку из таблицы, либо вообще ничего не получу.
Название: Обработка неуспешного запроса к БД
Отправлено: Britva от 01 Марта 2002, 15:03:09
Цитировать
А в каком случае может выполниться условие:
if(!$qc) {
print \'ошибка!!!\';
die();
}

когда таблица не существует/нет коннекта к БД/...

сначала лучше проверять на кол-во полученных записей (mysql_num_rows) а потом уже выбирать из их списка через mysql_fetch_array