2

我有一个带有“编辑”页面的自定义 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()?其他建议?

4

1 回答 1

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)
}

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

于 2013-04-24T20:57:47.650 回答