2010-01-15 126 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); 
}