mysql - update - modificar registro sql server
Incremente el campo de la base de datos mysql usando la sintaxis del registro activo de codeigniter (2)
Tengo el siguiente script php-codeigniter que intenta incrementar un campo de un registro usando la sintaxis del registro activo:
$data = array(''votes'' => ''(votes + 1)'');
$this->db->where(''id'', $post[''identifier'']);
$this->db->update(''users'', $data);
Esto produce el siguiente SQL:
"UPDATE
usuarios SET
votos = ''(votes + 1)'' WHERE
id = ''44''
"
Lo cual no se ejecuta, pero este SQL hace lo que estoy buscando: "UPDATE
usuarios SET
votos = (votes + 1) WHERE
id = ''44''
" `<- Tenga en cuenta la falta de citas (votos + 1 )
¿Alguien sabe cómo implementar este tipo de consulta con la sintaxis del registro activo de codeigniter?
Puedes hacer lo que se indica a continuación:
$this->db->where(''id'', $post[''identifier'']);
$this->db->set(''votes'', ''votes+1'', FALSE);
$this->db->update(''users'');
La razón por la que esto funciona es porque el tercer parámetro (opcional) FALSO le dice a CodeIgniter que no proteja la consulta generada con barras invertidas ( ''
). Esto significa que el SQL generado será:
UPDATE users SET votes= votes + 1 WHERE id= ''44''
Si nota, los backticks se eliminan de ''(votes+1)''
, lo que produce el efecto deseado de incrementar el atributo de votos en 1.
$data = array(''votes'' => ''votes + 1'');
foreach ($data as $key=>$val) {
$this->db->set($key, $val, FALSE);
}
$this->db->where(''id'', $post[''identifier'']);
$this->db->update(''users'', $data);