2012-01-19 46 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ブロックを試しましたが、何も返されませんでした。これはプレースホルダでクエリを返します、という

$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. 

注:

おかげで、

+0

あなたの 'uniq'フィールドはどのタイプですか?たぶん、文字列をint型のフィールドに設定しようとしているかもしれません。 –

+0

$ q = db_insert( 'my_db') - >フィールド(配列( 'uniq'、 'date')); $ q-> values(array( 'uniq' => $ uniq、 'date' => $ query ['date'] )); $ q-> execute(); – rix

+0

その構文がうまく機能します。 DrupalがSQLエラーを見ている開発者を妨げる理由は考えられません。 dbに自分自身で値を挿入することでこれをデバッグする必要がありました。 – rix

答えて

1

このコードをデバッグするには、あなたはそれをこのようにやってみてください。あなたが実際の値を使用してクエリを取得したい場合は、devel.moduleが有効になっているはずですし、その後:

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

私はこれを受け入れるつもりですが、これは最も賢明な答えのようですが、Drupalをこれ以上使用しないので、実際にはうまくいきません。 – rix

+0

'dpq($ query)' doesこの文脈では機能しません。 '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。

関連する問題