Zend_Db_Adapter::update()
返回受更新操作影响的行数。 确定查询是否成功的最佳方法是什么?
$data = array(
'updated_on' => '2007-03-23',
'bug_status' => 'FIXED'
);
$n = $db->update('bugs', $data, 'bug_id = 2');
Zend_Db_Adapter::update()
返回受更新操作影响的行数。 确定查询是否成功的最佳方法是什么?
$data = array(
'updated_on' => '2007-03-23',
'bug_status' => 'FIXED'
);
$n = $db->update('bugs', $data, 'bug_id = 2');
可能:
$data = array(
'updated_on' => '2007-03-23',
'bug_status' => 'FIXED'
);
$result = $db->update('bugs', $data, 'bug_id = 2');
if ($result < $numRows) {//pass in numRows as method arg or hardcode integer.
//handle error
} else {
return TRUE;
}
尝试像这样的想法是要验证人想要更新的记录数得到了更新。
实际更新的行数取决于原始值。所以即使'$ result'等于0 - 那也不意味着发生了什么错误 – zerkms 2012-07-15 12:05:16
$data = array(
'updated_on' => '2007-03-23',
'bug_status' => 'FIXED',
);
$n = 0;
try {
$n = $db->update('bugs', $data, 'bug_id = 2');
} catch (Zend_Exception $e) {
die('Something went wrong: ' . $e->getMessage());
}
if (empty($n)) {
die('Zero rows affected');
}
如果你只是在寻找一个布尔返回值,这个解决方案是最好的模型处理成功:
类Default_Model_Test扩展Zend_Db_Table类{
public function updateTest($testId, $testData){
try {
$this->_db->update('test', $testData, array(
'id = ?' => $testId
));
return true;
}
catch (Exception $exception){
return false;
}
}
}
但是,更好的解决方案是从控制器级别处理成功,因为它发出请求:
class Default_Model_Test extends Zend_Db_Table {
public function updateTest($testId, $testData){
$this->_db->update('test', $testData, array(
'id = ?' => $testId
));
}
}
class Default_TestController extends Zend_Controller_Action {
public function updateAction(){
try {
$testId = $this->_request->getParam('testId');
if (empty($testId)) throw new Zend_Argument_Exception('testId is empty');
$testData = $this->_request->getPost();
if (empty($testId)) throw new Zend_Argument_Exception('testData is empty');
$testModel->updateTest($testId, $testData);
}
catch (Exception $exception){
switch (get_class($exception)){
case 'Zend_Argument_Exception': $message = 'Argument error.'; break;
case 'Zend_Db_Statement_Exception': $message = 'Database error.'; break;
case default: $message = 'Unknown error.'; break;
}
}
}
}
这与多个资源类型时,使用的异常类型的开关,并且做根据你的程序的需要,什么是适当的是一个很好的解决方案。没有什么可以摆脱这种真空
如果它不是全成 - 一个将引发异常 – zerkms 2012-07-15 10:59:13
@zerkms我认为,除非有一个适配器问题或将引发Zend_Db_Statement例外更新将返回0行,如果没有行受影响不正确的查询。然而,你可能会得到一个关于没有足够的参数绑定或一些这样的Mysql/pdo错误。 – RockyFord 2012-07-15 11:18:45
@RockyFord:如果发生异常 - 从此次调用中将不会返回任何信息 – zerkms 2012-07-15 11:22:03