Zend框架$db->;更新结果


Zend framework $db->update result

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',
);
$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;
            }
        }
    }
}

当使用多种资源类型,在异常类型上使用开关,并根据程序的需要执行适当的操作时,这是一个很好的解决方案。没有什么能逃脱这种真空。

可能:

$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;
}

试着这样做吧,因为你想验证你想要更新的记录数量是否已经更新