使用2 where子句进行选择时出现空响应

时间:2014-03-27 15:32:45

标签: sql drupal drupal-7

我的XMLRPC功能是这样的,检查我的网站上是否已经存在内容,是否是最新的并在必要时进行更新。 为此,我检查它的编号(两种内容类型可以有相同的编号),它是哈希(唯一)和类型。

在我只有一种内容之前,我的功能正常工作,但现在我还需要检查内容类型,而不仅仅是数字和哈希。 这就是问题,当我尝试这样做时,我得到一个空的anwser。我的功能现在是这样的:

$query = db_query("SELECT (table_num.field_num) FROM (table_num, table_type) WHERE table_num.entity = table_type.entity AND table_num.field_num = :num AND table_type.field_type = :type", array(':num' => $num, ':type' =>$type));
 foreach ($query as $record) {
if($record->rowCount()==0) return 0;
else {
$query = db_query("SELECT (table_hash.field_hash) FROM (table_hash, table_type) WHERE table_hash.entity = table_type.entity AND table_hash.field_hash = :hash AND table_type.field_type = :type", array(':hash' => $hash, ':type' =>$type));
 foreach ($query as $record) {
if($record->rowCount()==1) return 1;
else{
$query = db_query("SELECT (table_num.entity_id) FROM (table_num, table_type) WHERE table_num.entity = table_type.entity AND table_num.field_num = :num AND table_type.field_type = :type", array(':num' => $num, ':type' =>$type));
 foreach ($query as $record) {
 echo $record->field_entity_id; 
}
 return $record;

P.S。当它返回0时,它在我的数据库中不存在,1是当它需要更新时它是最新的和实体。

很抱歉长SQL但我刚开始使用它,而我却没有设法缩短它。 有人知道为什么我会得到一个空的anwser吗?

1 个答案:

答案 0 :(得分:1)

构建查询的方式很危险,并导致SQL注入,因为你没有逃避变量。

而不是:

$query = db_query("SELECT (table_num.field_num) FROM table_num WHERE table_num.field_num = $num AND table_type.field_type = $type");

您可以使用:

$query = db_query("SELECT (table_num.field_num) FROM table_num WHERE table_num.field_num = :num AND table_type.field_type = :type", array(':num' => $num, ':type' =>$type));

这样Drupal会在插入变量之前对其进行清理,因此您知道它不会导致任何漏洞。

我实际上并不完全明白你的问题是什么 - 如果你能稍微澄清一点,我会看看我是否也可以提供帮助...