一些不使用db_query的查询语句(Drupal)

时间:2010-09-05 13:57:24

标签: drupal drupal-6

为什么某些在mysql中有效的查询不能与db_query一起使用?例如 -

“SELECT * FROM {tb1},{tb2} WHERE {tb1} .vid =%d”(当然我在mysql环境中测试时用%d代替实际的vid值)

“SELECT f1,f2,...,f10 FROM {tb1} INNER JOIN {tb2} ON {tb1} .vid = {tb2} .vid WHERE {tb1} .vid =%d AND {tb2} .vid =%d

虽然我在mysql环境中为两个语句返回了1条记录,但db_query根本没有返回任何内容。知道我在做什么错吗?值得一提的是,我使用的是IIS 7.5,Mysql 5.5,php 5.2.12 **** UPDATE **** 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 个答案:

答案 0 :(得分:1)

你试过......

db_query(“SELECT f1,f2,...,f10 FROM {tb1} tb1
INNER JOIN {tb2} tb2 ON tb1.vid = tb2.vid
在哪里tb1.vid =%d AND tb2.vid =%d“,$ vid,$ vid);

答案 1 :(得分:0)

你的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;
}

您不应该返回节点,而应该添加要添加到节点的添加项。此外,您加入vid后不需要两个where子句。

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

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