查询中的错误处理...尝试 - 捕获块

时间:2014-08-19 08:22:03

标签: php error-handling try-catch

我有这个代码。

$db = Zend_Registry::get('db');

$msg = 'INSERT INTO tablename ';
$msg .= '(customer_id, invoice_status_id, invoice_number, invoice_date, type, total_excl, total_incl, parent_invoice_number) ';
$msg .= 'VALUES ';
$msg .= '('. $customer_id .', '. 6 .', '. $this->_getNewInvoiceNumber() .', '. $invoice_date .', '.'3'.', '. $total_excl .', '. $total_incl .', '. $this->invoice_number() .');';
$db->query($msg);

我想把它放在try-catch块中。我想在查询失败时显示错误。怎么做?

2 个答案:

答案 0 :(得分:1)

天真的实施就是这样:

try {
  $db = Zend_Registry::get('db');
   (...)
  $db->query($msg);
}
catch (Exception $e) {
  echo "error: " . $e->getMessage();
  // maybe close connection also
}

这里虽然你错过了这一点,但只有在抛出异常时才会调用catch子句,这可能不会发生,例如,如果查询返回一个空集,则不会执行catch子句。我不太了解Zend,但是如果插入在失败时抛出异常,那么一切都有意义,如果没有,你应该看看其他方法来处理插入失败。

答案 1 :(得分:0)

你可以试试这个:

try {
$db = Zend_Registry::get('db');

$msg = 'INSERT INTO tablename ';
$msg .= '(customer_id, invoice_status_id, invoice_number, invoice_date, type, total_excl, total_incl, parent_invoice_number) ';
$msg .= 'VALUES ';
$msg .= '('. $customer_id .', '. 6 .', '. $this->_getNewInvoiceNumber() .', '. $invoice_date .', '.'3'.', '. $total_excl .', '. $total_incl .', '. $this->invoice_number() .');';
$db->query($msg);
}
catch (Zend_Exception $e) {
    die('Something wrong: ' . $e->getMessage());
}