PHP/SQL-乘法主键(重复时更新)

PHP/SQL-乘法主键(重复时更新),php,mysql,sql,Php,Mysql,Sql,我的数据库中有以下表格: CREATE TABLE IF NOT EXISTS `grid_users` ( `userid` int(11) NOT NULL, `times_played` int(4) NOT NULL DEFAULT '0', `won_total` varchar(50) NOT NULL DEFAULT '0', `won_1` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Did user win prize 1

我的数据库中有以下表格:

CREATE TABLE IF NOT EXISTS `grid_users` (
  `userid` int(11) NOT NULL,
  `times_played` int(4) NOT NULL DEFAULT '0',
  `won_total` varchar(50) NOT NULL DEFAULT '0',
  `won_1` varchar(50) NOT NULL DEFAULT '0' COMMENT 'Did user win prize 1? If yes, show badge',
  `won_1_time` int(22) NOT NULL,
  `won_2` int(1) NOT NULL DEFAULT '0',
  `won_2_time` int(22) NOT NULL,
  `won_3` int(1) NOT NULL,
  `won_3_time` int(22) NOT NULL,
  `last_update` int(22) NOT NULL,
  `type` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
如您所见,userid被设置为主键

尽管我希望PHP检查其中两列是否存在,如果存在->更新:

if($type == "1"){
$stmt = $dbh->prepare("INSERT INTO grid_users (type) 
            VALUES ('1') ON DUPLICATE KEY UPDATE won_total=won_total+'1';");

            }elseif($type == "2"){
            $stmt = $dbh->prepare("INSERT INTO grid_users (type) 
            VALUES ('2') ON DUPLICATE KEY UPDATE won_total=won_total+'1';");

            }
try {
                $stmt->execute();
            }
            catch(PDOException $e) {
                die($e->getMessage());
            }

尽管现在,由于它只检查一个主键的Userid,它只会更新数据库中的第一条记录,而不管$type设置为什么。

但是,我不明白为什么要为此使用insert。为什么不干脆做:

update grid_users
    set won_total = won_total + 1
    where type = 1;

唯一键`userid`,`type`UPDATE grid`用户设置唯一键userid,type无效..否,必须在表创建->创建表时使用唯一键,如果不存在`grid\u users`…您的列…,主键`userid`,唯一键`userid`,`type`。。。或者使用ALTER TABLE`grid\U users`ADD UNIQUE KEY`userid`,`type`,尽管它仅在您还指定了另一列时才起作用,以便它知道是否存在重复->INSERT INTO grid\U users userid,type VALUES。。。在重复密钥更新时…因为每个新用户都有一个新条目userid@oliverbj . . . 您没有将userid传递给insert,因此它将被设置为NULL,并且insert将失败。