某些查询语句不使用db_查询(Drupal)

某些查询语句不使用db_查询(Drupal),drupal,drupal-6,Drupal,Drupal 6,为什么一些在mysql中工作的查询不能与db_查询一起工作?比如说- “从{tb1},{tb2}中选择*其中{tb1}.vid=%d”(当然,在mysql环境中测试时,我用实际的vid值替换%d) 从{tb1}上的{tb1}内部联接{tb2}中选择f1、f2、…、f10。vid={tb2}.vid,其中{tb1}.vid=%d和{tb2}.vid=%d 虽然我在mysql环境中为这两条语句返回了1条记录,但db_query根本不返回任何内容。知道我犯了什么错误吗?为了更大的价值,我使用了IIS

为什么一些在mysql中工作的查询不能与db_查询一起工作?比如说-

“从{tb1},{tb2}中选择*其中{tb1}.vid=%d”(当然,在mysql环境中测试时,我用实际的vid值替换%d)

从{tb1}上的{tb1}内部联接{tb2}中选择f1、f2、…、f10。vid={tb2}.vid,其中{tb1}.vid=%d和{tb2}.vid=%d

虽然我在mysql环境中为这两条语句返回了1条记录,但db_query根本不返回任何内容。知道我犯了什么错误吗?为了更大的价值,我使用了IIS 7.5、mysql 5.5、PHP5.2.12 ****更新****db\u query/db\u fetch\u对象工作正常。只是hook\u视图没有被调用。因此,没有显示任何数据。很抱歉给您带来麻烦

已更新

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,
            ),
        ),
    );
}
你试过

db_查询(“从{tb1}tb1中选择f1、f2、…、f10
tb1.vid=tb2.vid上的内部联接{tb2}tb2

其中tb1.vid=%d和tb2.vid=%d“,$vid,$vid);

钩子加载的实现有点错误

/**
 * 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;
}
您不应该返回节点,而是返回要添加到节点的添加项。此外,由于您在vid上加入,因此不需要两个where子句

您的问题可能是查询正在工作,但是您在钩子中返回了错误的内容


您还可以在中看到它的使用示例。

我正在使用db\u fetch\u对象来获取实际数据。您好,谷歌,谢谢您的回复。我的hook\u load没有返回$node。它返回db\u fetch\u对象返回的对象。我提到了“WHERE”的奇怪问题我收回我的上述评论。我测试并发现db_query/db_fetch_对象没有故障。它们很好用。我的结论是没有结果,因为hook_视图没有被调用。我已经尝试过了。它仍然不起作用。奇怪的是,如果我在db_查询、drupal invoke hook_视图中只提供了一个占位符参数,就提供了带有两个条件的WHERE子句,如上面所述,尽管实际数据没有填入$node对象中;就空了。当我传递两个占位符参数只是为了对应sql语句中占位符的数量时,drupal不再调用hook_视图。对于带有一个占位符参数的WHERE子句条件,情况也是如此。我已经更新了我的帖子,这样你就能清楚地了解我在说什么。