我的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吗?
答案 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会在插入变量之前对其进行清理,因此您知道它不会导致任何漏洞。
我实际上并不完全明白你的问题是什么 - 如果你能稍微澄清一点,我会看看我是否也可以提供帮助...