如果不存在,则写入MySQL表

时间:2018-07-18 13:51:56

标签: php mysql

我尝试在数据库表中写入,但是在我需要检查列中不存在相同的变量之前。但是我的代码不能正确用于空表。如何修复它,使其在空表及以后的表中开始起作用?

    try
    {
        //$sql = "SELECT id FROM ".$table." WHERE ".$col." = :value";
        $sql = "SELECT id FROM column WHERE name = :value";
        $s = $pdo->prepare($sql);
        $s->bindValue(':value', $value);
        $relut = $s->execute();
        verifyVarDump($relut, '$relut: ');
        verifyVarDump($s, '$s: ');

        foreach($s as $row)
        {
            echo ' :OK: ';
            if(is_int($row['id']))
            {
                continue;
            }
            else
            {
                $valuesUnique[] = $value;
            }
        }
    }
    catch(PDOException $e)
    {
        echo 'Не удалось читать БД';
        exit();
    }

}

1 个答案:

答案 0 :(得分:1)

您需要的是Tim的注释,但是您可能不知道“约束”是什么,所以这里是步骤(实际上,您正在做的事情要简单得多)

1)在表定义中:添加主键索引或唯一索引。一点光读(https://dev.mysql.com/doc/refman/8.0/en/constraint-primary-key.html)。

这意味着,如果您尝试添加具有相同值的另一个条目,它将失败并抛出错误。然后您就可以利用这个优势了。

2)然后,在新行中添加“ INSERT INTO”,如果该值在“唯一”列中存在,它将失败,否则将失败。简单。一个查询就可以了:)

您还可以执行另外两项技巧:

a)您可以执行“ REPLACE INTO”操作,并说“如果唯一键不存在,请添加新行;如果确实存在,则先删除该行,然后添加我的新键”。

b)您可以执行“ INSERT INTO ..... ON DUPLICATE KEY UPDATE”,并显示“如果唯一键不存在,请添加新行;如果确实存在,则使用下半年的更新。

另外两个单行查询可以满足您的所有需求!

祝你好运。