Drupal 7 db_update - 检查错误

时间:2013-04-24 20:33:57

标签: php drupal drupal-7

我有一个带有“编辑”页面的自定义Drupal 7模块。

表单字段引用了几个数据库表,因此为了处理表单,我们尝试更新第一个表,并尝试将'$ error'设置为'true'并在我们尝试之前检查$ error更新下一个表。例如:

HTML:

<input name="field1" />
<input name="field2" />

PHP:

$error = false;

$update_table_1 = db_update('table1')
    ->fields(array(
        'field1' => $_POST['field1'],
    ))
    ->condition('id', $id)
    ->execute();

if(!update_table_1) {
    $error = true;
}

if(!$error) {
    $update_table_2 = db_update('table2')
        ->fields(array(
            'field2' => $_POST['field2'],
        ))
        ->condition('id', $id)
        ->execute();

    if(!$update_table_2) {
        $error = true;
    }
}

问题:如果只更新表2中的内容,它会在事件更新表2之前抛出错误,因为db_query说它不是真的,因为该字段与在数据库中(没有变化)。真的,如果有数据库/代码错误,我只想停止它。

Drupal 7 db_update API是否有某种错误报告功能,如mysql_error()?其他建议?

1 个答案:

答案 0 :(得分:4)

最安全的方法是使用事务和正确的PHP错误检查:

$transaction = db_transaction();

try {
  // Query 1
  db_update(...);

  // Query 2
  db_update(...);
}
catch (Exception $e) {
  // Rollback the transaction
  $transaction->rollback();

  // Do something with the exception (inform user, etc)
}

我应该提到只有在第二个查询失败时,如果您不希望 first 查询中的更改持续存在,则才需要进行事务处理。这是一个非常常见的要求,但可能不适合您的使用案例。