2013-04-04 69 views
1

我有下面的代码在form_alter我的模块中:的Drupal 7 form_alter打破了阿贾克斯形式与SQL阵

$query = db_select('field_data_field_product_photos', 'p'); 
$query->addField('p', 'entity_id', 'pid'); 
$query->addField('f', 'uri', 'uri'); 
$query->join('file_managed', 'f', 'p.field_product_photos_fid=f.fid'); 
$query->condition('p.entity_id', $products_nids, 'IN'); 
$query->condition('p.delta', 0, '='); 
$result = $query->execute(); 

但是当其他无线电,AJAX返回错误形式点击

enter image description here

$products_nids只是像array(10,14)这样的数组。如果放置array(10,14)而不是$products_nids它将正常工作。但$products_nids动态生成。

有人知道该怎么办吗?

P.S.在误差必须field_data_field_product_photos,不field_revision_field_product_photos

回答

1

只是看看生成的SQL:

...WHERE (p.entity_id IN())... 

很简单,$product_nids是你将它传递到查询点空,这就是产生无效SQL如上。为了避免这种情况,要么修复任何错误是被正确填充停止$product_nids,或者增加一些错误检查:

if (!empty($product_nids)) { 
    $query->condition('p.entity_id', $products_nids, 'IN'); 
} 
+0

'$ product_nids'不空的 - 我检查。例如在某些节点'$ product_nids ==数组(10,14)'上。如果在查询中放入'array(10,14)',一切都会很好。 – skadermen 2013-04-04 10:19:20

+0

对不起,这是 - 看产生的SQL,它不能说谎 – Clive 2013-04-04 10:19:42

+0

正好嘛,你刚刚证明了我的观点:)如果它的工作原理与静态数组,那么你就知道一定是'$ product_nids'或者是一个空数组,或者根本不是数组。就像我说的,SQL不能说谎只是查看产生的查询字符串 – Clive 2013-04-04 10:23:30