Zend framework $ db-> результат обновления

Zend_Db_Adapter::update() возвращает количество строк, на которые влияет операция обновления. Каков наилучший способ определить, был ли запрос успешным?

 $data = array( 'updated_on' => '2007-03-23', 'bug_status' => 'FIXED' ); $n = $db->update('bugs', $data, 'bug_id = 2'); 

Related of "Zend framework $ db-> результат обновления"

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

Если вы ищете только возвращаемое значение boolean, это решение лучше всего подходит для успешного использования модели:

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

Попробуйте что-то подобное с идеей, что вы хотите проверить, обновлено ли количество записей, которые вы хотели обновить.