由于某些原因,当我将我的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);
}
}
您是否错过了更新中的where语句? – 2010-01-15 13:00:06
之前的代码工作,直到我将mysql更改为mysqli。 – php 2010-01-15 13:02:44
如果您使用'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