1

在插入或更新mysql之前检查我的代码不起作用我不知道为什么

$sql = "SELECT * FROM downloads WHERE name = '" . $details['name']."' " ;
    $result = mysql_query($sql);

if( mysql_num_rows($result) === 0) {
    $sql = "INSERT INTO downloads (name, idu) VALUES ('".$details['name']."', '".$details['idu']."')";
    $result = mysql_query($sql);
   }
else{

    $sql2 = "UPDATE downloads SET idu='".$details['idu']."' WHERE name='". $details['name'] ."'";
    $result = mysql_query($sql2);

    }
4

2 回答 2

2

这通常使用以下方法处理on duplicate key update

INSERT INTO downloads (name, idu)
    VALUES (?, ?)
    ON DUPLICATE KEY UPDATE idu = VALUES(idu);

为此,您需要name声明unique或拥有一个unique索引:

ALTER TABLE downloads ADD CONSTRAINT unq_downloads_name UNIQUE (name);

是参数?占位符。不要使用参数值来处理查询字符串!这样做会使查询更难优化、调试,并使其容易受到 SQL 注入攻击。无论好坏,不再支持的“mysql_”函数不支持参数,因此这是将您的代码(和您的技能!)更新为“mysqli_”的另一个原因。

于 2018-05-28T14:34:24.653 回答
0
`插入到 xxxxxxx
(dd1, dd2, dd3, dd4, dd5, dd6, dd7, dd8, dd9, dd0)
选择'配置','9',NULL,'appname','2016-10-20 11:55:01',NULL,'xxx','2007-09-18 16:31:03',NULL,NULL
从双
不存在的地方(select * from xxx where dd2 = '9' and dd4 = 'appname' and
dd6 为 NULL,dd0 为 NULL);`
`更新xxx
放
dd1 = 'config', dd2 = '9', dd3 = NULL, dd4 = 'appname', dd5 = '2016-10-20 11:55:01',
dd6 = NULL,dd7 = 'xxx',dd8 = '2007-09-18 16:31:03',dd9 = NULL,dd0 = NULL
在哪里
dd2 = '9' 和 dd4 = 'appname' 和
dd6 为 NULL,dd0 为 NULL;`

这样就可以处理具有NULL值的唯一键

于 2018-08-10T21:01:39.620 回答