2013-04-04 68 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