【问题标题】:Need to debug db_insert but no error given需要调试 db_insert 但没有给出错误
【发布时间】:2012-01-19 14:19:27
【问题描述】:

我在 D7 安装中有一个自定义模块。

在提交功能中,我正在执行以下操作:

my_custom_block_get_form_submit($form, &$form_state) {

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

执行代码后,我在错误日志中没有任何错误,并且网站返回标准的“此网站遇到错误”。

有人知道我该如何调试吗?我尝试了一个 try catch 块,但没有返回任何内容。

谢谢,

【问题讨论】:

  • 您的uniq 字段是哪种类型?也许您试图将字符串设置为应为 int 的字段。
  • $q = db_insert('my_db')->fields(array('uniq','date')); $q->values(array('uniq'=> $uniq, 'date' => $query['date'] )); $q->执行();
  • 该语法效果更好。不知道为什么 drupal 会阻止开发人员看到 sql 错误。必须自己通过将值插入数据库来调试它。
  • @rix:这是奇怪的行为,我总是使用你原来问题中的语法,如果我犯了错误,我总是会看到错误。您是否安装了任何可能是开发版本的模块(这些可能会干扰)?

标签: php database drupal-7 drupal-modules


【解决方案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

【讨论】:

  • 我会接受这个,因为这似乎是最明智的答案,但因为我不再使用 Drupal(出于这样的原因)我不知道它是否真的有效 :)跨度>
  • dpq($query) 在这种情况下不起作用。它抛出异常是因为dpq 需要SelectQueryInterface 类型的对象,而db_insert 返回没有实现它的InsertQuery,所以你得到一个异常。但是,echo (string)$query 可以工作,即使它不打印占位符。我不知道打印完整查询的方法,因为所有相关字段都受到保护。
【解决方案2】:

要调试这段代码,你应该试试这个。

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

此代码打印 db_launch 表的自动增量 ID。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    相关资源
    最近更新 更多