некоторые операторы запросов не работают с db_query (Drupal) - PullRequest
0 голосов
/ 05 сентября 2010

Почему некоторые запросы, которые работают в mysql, не работают с db_query?Например -

"SELECT * FROM {tb1}, {tb2} WHERE {tb1} .vid =% d" (Конечно, я заменяю% d фактическим значением vid во время тестирования в среде mysql)

"ВЫБЕРИТЕ f1, f2, ..., f10 ИЗ ВНУТРЕННЕГО СОЕДИНЕНИЯ {tb1} {tb2} ON {tb1} .vid = {tb2} .vid ГДЕ {tb1} .vid =% d AND {tb2} .vid =% d

Хотя я получаю 1 запись, возвращаемую в среде mysql для обоих операторов, db_query вообще ничего не возвращает. Любая идея, какую ошибку я совершаю?Я использую IIS 7.5, Mysql 5.5, php 5.2.12 **** ОБНОВЛЕНИЕ **** db_query / db_fetch_object работает очень хорошо. Просто этот hook_view не вызывается. Таким образом, в результате данные не отображаются. Извинитеза неприятности.

ОБНОВЛЕНО

function mymodule_load($node){
   $query = 'SELECT f1,f2,...,f10 FROM {tb1} INNER JOIN {tb2} ON {tb1}.vid = {tb2}.vid WHERE {tb1}.vid = %d AND {tb2}.vid = %d';

   $result = db_query($query,$node->vid);//If I use db_query($query,$node->vid,$node->vid), drupal doesn't invoke hook_view

   drupal_set_message($node->vid,"status"); //for testing purpose
   return db_fetch_object($result);
}

function mymodule_view($node, $teaser = FALSE, $page = FALSE){
    $node = node_prepare($node, $teaser); // get it ready for display

    $f1 = check_markup($node->f1);
     ..............
    $f10 = check_markup($node->f10);

    // Add theme stuff here
    $node->content['mycontent'] = array(
       '#value' => theme('defaultskin', $f1,...,$f10),
       '#weight' => 1,
    );


    return $node;
}

function mymodule_theme(){

    return array(
        'defaultskin' => array(
            'template' => 'node-defaultskin',
            'arguments' => array(               
                'f1' => NULL,
                ......
                'f10' => NULL,
            ),
        ),
    );
}

Ответы [ 2 ]

1 голос
/ 05 сентября 2010

Вы пробовали ...

db_query ("ВЫБЕРИТЕ f1, f2, ..., f10 ОТ {tb1} tb1
ВНУТРЕННИЙ СОЕДИНЕНИЕ {tb2} tb2 ВКЛ tb1.vid = tb2.vid
ГДЕ tb1.vid =% d И tb2.vid =% d ", $ vid, $ vid);

0 голосов
/ 06 сентября 2010

Ваша реализация hook_load немного ошибочна.

/**
 * Implementation of hook_load().
 */
function module_load($node) {
  $additions = db_fetch_object(db_query('f1,f2,...,f10 FROM {tb1} 
                                         INNER JOIN {tb2} ON {tb1}.vid = {tb2}.vid
                                         WHERE {tb1}.vid = %d', $node->vid)); //

  return $additions;
}

Вы не должны возвращать узел, но дополнения, которые вы хотите добавить к узлу.Также вам не нужны два предложения where, так как вы присоединяетесь к vid.

Возможно, ваша проблема в том, что запрос работает, но вы возвращаете неправильную вещь в ловушке.

Вы также можете увидеть пример его использования в примере модуля .

...