Php 我想在插入或更新mysql之前检查一下

Php 我想在插入或更新mysql之前检查一下,php,mysql,sql,Php,Mysql,Sql,在插入或更新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']

在插入或更新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);

    }

这通常使用重复密钥更新来处理:

要使其工作,您需要将名称声明为唯一或具有唯一索引:

那个?是参数的占位符。不要用参数值咀嚼查询字符串!这样做会使查询更难优化、调试,并使其容易受到SQL注入攻击。不管是好是坏,不再受支持的mysql_uu函数不支持参数,因此这是更新代码和技能的另一个原因!到mysqli_2;

`INSERT INTO xxxxxxx (dd1, dd2, dd3, dd4, dd5, dd6, dd7, dd8, dd9, dd0) select 'config', '9', NULL, 'appname', '2016-10-20 11:55:01', NULL, 'xxx', '2007-09-18 16:31:03', NULL, NULL FROM dual Where not exists (select * from xxx where dd2 = '9' and dd4 = 'appname' and dd6 is NULL and dd0 is NULL) ;`
这样你就可以处理唯一键有空值的问题了

mysql\u???这已经过时多年了。请停止使用不推荐/已删除的mysql_*API。使用mysqli_*或PDO。还要了解防止SQL注入的准备语句您正在使用过时的函数,并且您的查询可能会受到注入攻击!正如@GordonLinoff已经提到的,您至少应该升级到或更好地使用。此外,如果您只想检查是否存在记录,以便可以执行更新而不是插入,那么您应该查看以下内容:除此之外,您的实际问题是什么?格式化代码以供显示会很有帮助。下面是如何做到这一点:您还应该在SQL中添加通用格式,并在子句之间添加所有caps关键字和换行符,以使其更具可读性。
ALTER TABLE downloads ADD CONSTRAINT unq_downloads_name UNIQUE (name);
`INSERT INTO xxxxxxx (dd1, dd2, dd3, dd4, dd5, dd6, dd7, dd8, dd9, dd0) select 'config', '9', NULL, 'appname', '2016-10-20 11:55:01', NULL, 'xxx', '2007-09-18 16:31:03', NULL, NULL FROM dual Where not exists (select * from xxx where dd2 = '9' and dd4 = 'appname' and dd6 is NULL and dd0 is NULL) ;` `UPDATE xxx SET 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 Where dd2 = '9' and dd4 = 'appname' and dd6 is NULL and dd0 is NULL;`