静态Drupal 7查询到动态查询

时间:2020-07-28 08:23:54

标签: php mysql sql drupal drupal-7

我需要输入agent_name,count(id),ifs_code,area_code。

当我使用静态查询时,一切正常:

import shodan
api = shodan.Shodan('YOUR API KEY')

info = api.host('8.8.8.8')
shodan info

此查询的结果:

$result = db_query('SELECT agent_name, count(id) as count, ifs_code, area_code FROM declarations WHERE fisccode = :idno GROUP BY agent_name', array(':idno' => $fisccode))->fetchAll();

但是我不明白如何在动态查询中采用 count(id)作为计数

我尝试这个:

/report5.inc:82: array (size=1) 0 => object(stdClass)[10] public 'agent_name' => string 'GHEOLARIS S.A' (length=13) public 'count' => string '3' (length=1) public 'ifs_code' => string '02' (length=2) public 'area_code' => string '0110' (length=4)

addExpression破坏了一切,在这行phpStorm给我以下警告之后:在字符串中找不到方法'condition'

在drupal日志中,我出现以下错误:在字符串上调用成员函数condition()

请帮助我!

1 个答案:

答案 0 :(得分:1)

我认为问题在于,并非所有数据库API函数都可以链接。请仔细阅读Database API Chaining并指出:

无法链接的功能:

  • addExpression()
  • addField()
  • addJoin()
  • extend()
  • innerJoin()
  • join()
  • leftJoin()
  • rightJoin()

您共享的错误也表明了这一点,因为在使用condition()后出现了addExpression()错误,它没有返回数据库对象。

因此对于您的动态查询,在分配给$query之前最好准备一个$result变量:

$query = db_select('declarations', 'd');
$query->fields('d', array('agent_name', 'ifs_code', 'area_code'));
$query->addExpression('COUNT(id)', 'count');
$query->condition('fisccode', $fisccode);
...
$result = $query->execute()->featchAll();