某些查询语句不使用db_查询(Drupal)
为什么一些在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视图没有被调用。因此,没有显示任何数据。很抱歉给您带来麻烦 已更新某些查询语句不使用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
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、…、f10tb1.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子句条件,情况也是如此。我已经更新了我的帖子,这样你就能清楚地了解我在说什么。