J'ai le script php-codeigniter suivant qui tente d'incrémenter un champ d'un enregistrement en utilisant la syntaxe d'enregistrement actif:
$data = array('votes' => '(votes + 1)');
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
Cela produit le SQL suivant:
"UPDATE
Utilisateurs SET
votes= '(votes + 1)' WHERE
id = '44'
"
Ce qui ne fonctionne pas, mais ce SQL fait ce que je recherche: "UPDATE
Utilisateurs SET
votes= (votes + 1) WHERE
id = '44'
"" <- Notez le manque de citations autour (votes + 1)
Quelqu'un sait-il comment implémenter ce type de requête avec la syntaxe d'enregistrement active de codeigniter?
Vous pouvez faire comme indiqué ci-dessous:
$this->db->where('id', $post['identifier']);
$this->db->set('votes', 'votes+1', FALSE);
$this->db->update('users');
La raison pour laquelle cela fonctionne est que le troisième paramètre (facultatif) FALSE indique à CodeIgniter de ne pas protéger la requête générée avec des astuces ('
). Cela signifie que le SQL généré sera:UPDATE users SET votes= votes + 1 WHERE id= '44'
Si vous remarquez, les backticks sont supprimés de '(votes+1)'
, ce qui produit l'effet souhaité d'incrémenter l'attribut votes de 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);
Vous pouvez faire comme indiqué ci-dessous:
public function increament_product_count(){
$product_id=$this->input->post('product_id');
$this->db->where('id', $product_id);
$this->db->set('click_count', 'click_count+1', FALSE);
$this->db->update('tbl_product');
}