2013-12-10 4 views
2

Я знаю, что это часто задаваемый вопрос, но позвольте мне немного объяснить, почему мне нужно снова спросить об этом.Как проверить, был ли мой запрос на обновление MySQL успешным, если обновление в Code Igniter отсутствует?

Большинство ответов там предлагает использовать

$this->db->affected_rows() 

Это не работает в моей ситуации, как у меня может быть ситуация, что обновление данных такое же, как данные в базе данных, поэтому она возвращает 0, даже если обновление - это успех.

Я знаю, что могу написать еще один запрос, чтобы проверить, не так ли, потому что данные одинаковы, но это звучит глупо для меня.

Другой способ заключается в использовании Active Record класса в коде воспламенитель, так что линия будет что-то вроде:

$error_num = $this->db->update("users", array('firstName' => $newFirstName)); 
return $error_num; 

, который является лучшим решением (по крайней мере, это работает, даже если нет никакого обновления из-за повторные данные). Тем не менее, я хотел бы использовать класс базы данных, то есть что-то вроде:

$this->db->query('update table set field = somedata where id=1'); 

Это повышает читабельность моего кода для Coder, кто знает PHP + SQL, но не знакомы с кодом воспламенитель, но вот почему я спрашиваю, знает ли кто-нибудь, как мне получить номер ошибки, если я запрошу таким образом?

Т.е. что-то вроде mysql_errno() при использовании mysql_query ($ query) в PHP.

+0

Вы можете использовать транзакции, или добавить поле DATETIME к вашему столу как LAST_MODIFIED и обновления всегда с текущей даты-времени, так что вы будете знать, когда он был изменен. – user2844810

+0

Я знаю, что есть много способов сделать это, но просто звучит глупо, чтобы сделать еще один запрос, чтобы проверить успех другого запроса. – cytsunny

ответ

1

И будет работать, как же лишь разницей

если вы используете активный класс записи все входные переменные экранируются автоматически

Если вы хотите безопасности вам лучше пойти с активной записи класса

Если вы используете обычное выполнение запроса, вам необходимо вручную выполнить входные параметры, используя $ this-> db-> escape_str()

$id = $this->db->escape_str($id) 

Вы можете проверить статус выполнения запроса.

$status = $this->db->update("users", array('firstName' => $newFirstName)); 

if($status) 
{ 
    //here you can check the number of affected rows if required 
    echo $this->db->affected_rows(); 

}else{ 

     //here you can prcess for failure case 
     log_message('Error', $this->db->_error_message()); 

} 

//return the status to required place 
return $status 
0

У меня есть этот код для проверки.

$status = $this->db->query('update table set field = somedata where id=1'); 
if($status) 
    return true; 
else 
    return false; 
Смежные вопросы