2012-01-19 35 views
0

我在D7安裝中有一個自定義模塊。需要調試db_insert,但沒有給出錯誤

在提交功能,我做了以下內容:

my_custom_block_get_form_submit($form, &$form_state) { 

$d = db_insert('db_launch') 
->fields(array(
'uniq' => $uniq 
)) 
->execute(); 

執行的代碼後,我得到的錯誤日誌中沒有錯誤,並且站點返回標準「這個網站遇到一個錯誤」 。

有沒有人有想法我可以如何調試?我嘗試了一個try catch塊,但是沒有返回任何東西。

感謝,

+0

你的'uniq'字段的類型是?也許你試圖將字符串設置爲應該是int的字段。 –

+0

$ q = db_insert('my_db') - > fields(array('uniq','date')); $ q-> values(array( 'uniq'=> $ uniq, 'date'=> $ query ['date'] )); $ q-> execute(); – rix

+0

該語法效果更好。不知道爲什麼Drupal會阻止開發人員看到SQL錯誤。必須通過自己將值插入數據庫來進行調試。 – rix

回答

1

調試代碼,你應該嘗試做這種方式:

$query = db_insert('db_launch') 
->fields(array(
'uniq' => $uniq 
)); 

echo (string) $query ; // This will output your query that would be created with an insert. 

$d = $query->execute(); // and later on you can attach the output result. 

需要注意的是,這將返回佔位符的查詢。如果你想獲得與實際值的查詢,你應該有devel.module啓用,則:

echo dpq($query) ; // This will output your query without placeholders 
+1

我會接受這個,因爲它似乎是最明智的答案,但因爲我不再使用Drupal(因爲這樣的原因),我不知道它是否真的有效:) – rix

+0

'dpq($ query)'確實在這種情況下不起作用。它拋出一個異常,因爲'dpq'需要一個'SelectQueryInterface'類型的對象,'db_insert'返回'InsertQuery',它不會實現它,所以你會得到一個異常。但是,echo(string)$ query'起作用,即使它不打印佔位符。我不知道打印出完整查詢的方法,因爲所有相關字段都受到保護。 – myrosia

0

調試代碼,你應該試試這個。

$query = db_insert('db_launch') 
->fields(array(
    'uniq' => $uniq 
)); 
$res = $query->execute(); 
echo $res; 

此代碼打印db_launch表的自動增量ID。

相關問題