2010-01-15 7 views
2

Pour une raison quelconque, lorsque j'ai changé mon code php de mysql en mysqli, tout a été chamboulé. Par exemple, lorsqu'un utilisateur entre une évaluation, ma table mysql est mise à jour deux fois en entrant une nouvelle ligne et en mettant à jour la bonne ligne. Je me demandais comment puis-je corriger ce problème afin qu'il ne met à jour la nouvelle ligne et vérifie pour voir s'il n'y a pas de ligne, il en entre un?Problème de mise à jour de la base de données PHP & Mysql

code PHP

// function to insert rating 
function rate(){ 
    $dbc = mysqli_connect ("localhost", "root", "", "sitename"); 
    $text = strip_tags($_GET['rating']); 
    $update = "update vote set counter = counter + 1, value = value + ".$_GET['rating'].""; 

    $result = mysqli_query($dbc,$update); 
    if(mysqli_affected_rows() == 0){ 
     $insert = "insert into vote (counter,value) values ('1','".$_GET['rating']."')"; 
     $result = mysqli_query($dbc,$insert); 
    } 
} 

ancien code php

// function to insert rating 
function rate(){ 
    $text = strip_tags($_GET['rating']); 
    $update = "update vote set counter = counter + 1, value = value + ".$_GET['rating'].""; 

    $result = mysql_query($update); 
    if(mysql_affected_rows() == 0){ 
     $insert = "insert into vote (counter,value) values ('1','".$_GET['rating']."')"; 
     $result = mysql_query($insert); 
    } 
} 
+1

Ne manquez-vous pas une clause 'where' sur votre mise à jour? –

+0

le code a travaillé avant jusqu'à ce que j'ai changé mysql en mysqli. – php

+1

Il est peut-être préférable d'utiliser INSERT ... ON DUPLICATE KEY UPDATE (voir http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html), à condition que vous ayez a une colonne avec un index unique dessus (qui devrait être dans votre clause 'WHERE 'manquante, comme dans le commentaire de klausbyskov - ce que vous avez maintenant va incrémenter * la valeur' counter' de chaque ligne *, et mettre la 'valeur' valeur à tout ce qui est dans '$ _GET ['rating']'). –

Répondre

0

que diriez-vous d'essayer cette

if (mysqli_affected_rows($dbc) ==0){ 
+0

Cela devrait être fait automatiquement par la fonction (c'est ce que dit le manuel). Source: http://php.net/manual/en/function.mysql-affected-rows.php – AntonioCS

0

Vous devriez plutôt combiner les deux déclarations. Cela vous obligerait à avoir une clé PRIMARY, peut-être nommé id.

// function to insert rating 
function rate() { 
    $dbc = mysqli_connect ("localhost", "root", "", "sitename"); 
    $text = strip_tags($_GET['rating']); 
    $update = sprintf('INSERT INTO vote SET 
         id = 1, 
         counter = 1, 
         value = %1$d 
         ON DUPLICATE KEY UPDATE 
         counter = counter + 1, 
         value = value + %1$d', 
         $text); 
    mysqli_query($dbc,$update); 
} 
Questions connexes