Обработка ошибки db_query

Главные вкладки

Аватар пользователя Forman Forman 23 марта 2011 в 5:05

Добрый день господа!

Есть следующий код:

<?php
$node_type 
"preview_front_content";
$list_no 5;
$sql1 "SELECT field_data_body.entity_id, field_data_body.language, field_data_body.body_value, field_data_body.body_summary FROM {field_data_body} WHERE field_data_body.bundle = '$node_type' AND field_data_body.deleted = 0 ORDER BY field_data_body.revision_id";
$result1 db_query_range($sql10$list_no);
?>

В принципе все работает как надо, тут просто извлекается контент из базы данных Drupal с типом материала preview_front_content

Проблема в следующем, эта таблица базы данных создается автоматически при создании такого материала, и когда база данных создана то все работает нормально, но вот если нету этой базы данных тогда уже проблема. Друпал просто падает и даже админ панель не работает. Ошибку в логах выдает такую:

PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'anyks2.field_data_body' doesn't exist: SELECT field_data_body.entity_id, field_data_body.language, field_data_body.body_value, field_data_body.body_summary FROM {field_data_body} WHERE field_data_body.bundle = 'preview_front_content' AND field_data_body.deleted = 0 ORDER BY field_data_body.revision_id LIMIT 0, 5; Array ( ) в функции preview_front_page() (строка 1234 в файле /Users/Frazer/Sites/anyks2/sites/all/themes/anyks/template.php).

Вроде все понятно, появляется ошибка известно почему она появляется но вот как обработать её? как поставить проверку что мол если базы данных не существует то запрос делать не надо? Просто чтобы Drupal не падал.

Ничего не выходит, чем не пробовал определять ничего не выходит, т.е. любое обращение к этой базе данных которой нету ведет падение Drupal и ничего сделать не получается. Удалось даже отловить ошибку, пишет что ошибка такая но Drupal при этом грохнулся...

Комментарии

Аватар пользователя Ch Ch 23 марта 2011 в 6:35
  1. Обрабатывать ошибки можно с помощью исключений. Например, так:
    try {
        db_query('SELECT * FROM table');
      } catch (Exception $e) {
        drupal_set_message($e->getMessage(), 'error');
      }
     
  2. Проверить наличие таблицы в базе можно так:
    SHOW TABLES FROM DATABASE LIKE tablename
    или с помощью drupal_get_schema
  3. Вместо проверки наличия таблицы в базе, можно проверять существования соответствующего типа ноды или поля с помощью field API

P.S. Непонятно, для чего вообще создавать для каждой ноды отдельную таблицу(ы).