2010-01-15 174 views
2

由于某些原因,当我将我的php代码从mysql更改为mysqli时,一切都搞砸了。PHP和Mysql数据库更新问题

例如,当用户输入评级时,我的mysql表会通过输入一个新行并更新正确的行来更新两次。我想知道我该如何解决这个问题,所以它只更新新行并检查是否没有行进入?

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

旧的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

您是否错过了更新中的where语句? – 2010-01-15 13:00:06

+0

之前的代码工作,直到我将mysql更改为mysqli。 – php 2010-01-15 13:02:44

+1

如果您使用'INSERT ... ON DUPLICATE KEY UPDATE'(请参阅http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html),您可能会更好一些。得到了一个带有唯一索引的列(它应该在你缺失的'WHERE'子句中,就像在klausbyskov的评论中一样 - 你现在得到的将会增加*每行的'counter'值,并且设置'value'值到'$ _GET ['rating']'中的任何值)。 – 2010-01-15 13:09:02

回答

0

怎么想这个

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

这应该由功能自动完成(所以说手册)。资料来源:http://php.net/manual/en/function.mysql-affected-rows.php – AntonioCS 2010-01-15 13:52:19

0

而应该将二者结合起来的语句。这将需要你有一个主键,也许命名的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); 
}