我需要输入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()
请帮助我!
答案 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();