2012-01-19 2 views
0

У меня есть настраиваемый модуль в установке D7.Нужно отлаживать db_insert, но ошибка не указана

В функции представить, что я делаю следующее:

my_custom_block_get_form_submit($form, &$form_state) { 

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

После выполнения кода, я получаю никаких ошибок в журнале ошибок, а также сайты, не возвращают стандарт «Этот сайт обнаружил ошибку» ,

У кого-нибудь есть идея, как я могу отладить это? Я попробовал блок catch try, но ничего не возвращал.

Спасибо,

+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

Для отладки этого кода, вы должны стараться делать это таким образом:

$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 таблицы.