[help] При отсутствии поля в БД, выдает ошибку, как исправить?

Тема в разделе "Базы данных", создана пользователем Welho®, 10 окт 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Welho®

    Welho® Предвестник пьянки

    Регистр.:
    4 дек 2007
    Сообщения:
    855
    Симпатии:
    331
    нужна помощь,
    производится выборка из БД, запрос вида:
    Код:
    $group = db_fetch_row(db_query("select group_id from users where name='".$_SESSION['log']."'"));
    $acos = db_fetch_row(db_query("select id from acos where name='prod_roditel'"));
    $row = db_fetch_row(db_query("select id from acos_groups where (acos_id='".$acos['id']."') and (group_id='".$group['group_id']."')"));
    if(!$row['id']) {
    $smarty->assign('noprod_roditel', 1);
    }
    значение поля может иметь 1 (единицу), или поле может отсутствовать.
    Если поле отсутствует, то выдает ошибку:
    Код:
    Call to a member function on a non-object in o:\site.ru\example.php on line XX
    Суть вопроса, что этот запрос построен на аналогичном, который работает в другом месте движка, так вот там при подобном запросе, тоже поле таблицы может иметь значение 1(единица) или поле может вообще отсутствовать, но ошибок не выдает.

    Подскажите, почему так происходит и как формировать запрос, что если поле отсутствует (не пустое, а именно отсутствует), то корректно отрабатывался и не возвращал ошибку?
     
    Caurus нравится это.
  2. megadude

    megadude

    Регистр.:
    6 сен 2006
    Сообщения:
    184
    Симпатии:
    66
    Можешь проверять поле на наличие и в зависимости от этого строить запрос:
    PHP:
    $tableFields mysql_list_fields("databasename""tablename");
    $columns mysql_num_fields($fields);
           
    for (
    $i=0$i<$columns$i++) {
        
    $field_array[] = mysql_field_name($fields$i);
    }
           
    if (
    in_array("your_field"$field_array)) {
        
    //Делаешь полный запрос к БД
    } else {
        
    //Запрос урезаешь - так как поле в БД отсутствует
    }
    Также можешь попытаться поиграться с EXISTS:Перейти по ссылке
     
    Caurus нравится это.
Статус темы:
Закрыта.