简化PHP到MySQL

我目前正在编写一种游戏,我需要将PHP部分简化为MysqL.

现在更新列我这样做(在PHP中):

$res = $db->query("
SELECT succeeded
     , Failed
     , prison 
  FROM users_crime_masteries 
 WHERE uid = $uid 
   AND cid = $crimeid
");
if($status == 'succeeded') {
        if(!$res->num_rows) {
            $db->query("INSERT INTO users_crime_masteries (uid, cid, succeeded) VALUES($uid, $crimeid, 1)");
            return 1;
        }
        else {
            $row = $res->fetch_object();
            $db->query("UPDATE users_crime_masteries SET succeeded = succeeded + 1 WHERE uid = $uid AND cid = $crimeid");
            return $row->succeeded += 1;
        }
    }

^这是功能的一半,但你明白了.

我基本上只想在MysqL中实现的是,如果没有行,则插入带有cid和uid的新行 – 如果存在行,则使用1更新成功.

我一直在浏览stackoverflow,我基本上理解的是我必须使用INSERT … ON DUPLICATE KEY UPDATE查询.

但我发现了这个评论MySql Table Insert if not exist otherwise update

我有一个名为id的列,它是自动增量和主键.我的问题是,这会导致任何问题吗?

我目前的MysqL版本是:5.7.24

另外,对于这个ON DUPLICATE KEY UPDATE,我是否必须将uid和cid列作为密钥?

更多信息:

查询更改为:

switch($status) {
        case 'succeeded' :
            $db->query("INSERT INTO users_crime_masteries (uid, cid, succeeded) VALUES($userid, $crimeid, 1) ON DUPLICATE KEY UPDATE succeeded = succeeded + 1");
        break;
        case 'Failed' :
            $db->query("INSERT INTO users_crime_masteries (uid, cid, Failed) VALUES($userid, $crimeid, 1) ON DUPLICATE KEY UPDATE Failed = Failed + 1");
        break;
        case 'prison' :
            $db->query("INSERT INTO users_crime_masteries (uid, cid, Failed, prison) VALUES($userid, $crimeid, 1, 1) ON DUPLICATE KEY update Failed = Failed + 1, prison = prison + 1");
        break;
    }

运行以下MySQL查询

ALTER TABLE `users_crime_masteries`


ADD UNIQUE KEY `uid` (`uid`),
  ADD UNIQUE KEY `cid` (`cid`),

一个不同的cid进行了一些犯罪,通过PHPmyadmin检查但是只有一行,更新了成功的字段.

我错过了什么吗?

解决方法:

如果您向表中添加唯一键(uid,cid),那么ON DUPLICATE KEY UPDATE应该可以正常工作.您的id列不会受到影响或导致问题.

你还应该注意你的代码不容易进行sql注入,看起来它可能是.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...