web-dev-qa-db-fra.com

Incrémenter le champ de la base de données mysql en utilisant la syntaxe d'enregistrement active de codeigniter

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 SETvotes= '(votes + 1)' WHERE id = '44' "

Ce qui ne fonctionne pas, mais ce SQL fait ce que je recherche: "UPDATE Utilisateurs SETvotes= (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?

58
Casey Flynn

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.

113
Boban
$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);
4
wanderer

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

    }
0
Sani Kamal