一个php函数,用于在true / false上插入或更新mysql表

时间:2009-10-30 12:37:09

标签: php mysql

我试图编写一个函数来检查用户是否存在于表中,如果是,则更新该行,如果没有,则插入它。

这是我的功能:

        function UserExists($screenname){
            $mysql = mysql_fetch_array ( mysql_query("SELECT * FROM `users` WHERE `screenname` = '$screenname' "));
                if($mysql){
                    return TRUE;
                }else{
                    return FALSE;
                }
}

我使用以下方法执行此功能:

if(UserExists($user)){
mysql_query("UPDATE `users` SET  `token` =  '$token' ,  `secret` =  '$secret'  WHERE `screenname` = '$user' ");
}else{
mysql_query("INSERT INTO `users` (`screenname`, `token`, `secret`) VALUES ('$user', '$token', '$secret')");
}

它没有做任何事情,没有抛出任何错误,但也没有更新表。

4 个答案:

答案 0 :(得分:3)

您想要查看INSERT ... ON DUPLICATE KEY UPDATE ... MySQL query syntax,只需一个查询即可使用。

INSERT INTO users (screenname, token, secret) VALUES ('screenname', 'token', 'secret')
ON DUPLICATE KEY UPDATE token = 'token', secret = 'secret'

screenname应该是您可能目前没有的唯一(或主键)。我建议在数据库表中添加一个ID列,并使用它来引用数据库行。

答案 1 :(得分:0)

在通话后拨打mysql_error以查看您收到的错误。另一个好的调试技术是使用MySQL客户端(如mysqlfront或phpMyAdmin)在服务器上执行它。

答案 2 :(得分:0)

你最好的解决方案是在JoostK声明

时打开DUPLICATE KEY

答案 3 :(得分:0)

我建议在这种情况下使用REPLACE INTO SET col = val,您需要做的只是在表上定义一个唯一索引。

Replace Command将查看唯一索引,如果一行已存在则会更新现有索引,如果不存在则会插入新索引。