PHP 和 MYSQL 对于 UPDATE/INSERT IF EXISTS,此 MySQL 语法是否正确

标签 php mysql if-statement

我的计划是从外部更新/插入现有/新记录到数据库中,我已设置要进入数据库的信息,但无法检查它是否已经存在。

我第一次尝试做数据库的事情

    $link = resdb::connect();
    $q = "IF ( EXISTS ( SELECT * FROM property AS this WHERE this.name = $propertyname ) )"
         ."begin"
            // UPDATE PROPERTY IF IT EXISTS
            ."UPDATE property (name, propertylocation, propertyrating, propertytype)" 
            ."SET ($propertyname, $locationid, $ratingid, $typeid)"          
            ."WHERE name = $propertyname"
         ."end"
         ."ELSE"
         ."begin"
            ."INSERT INTO property (name, propertylocation, propertyrating, propertytype)" 
            ."VALUES ($propertyname, $locationid, $ratingid, $typeid)"
         ."end";
    $r = mysqli_query($link, $q);
    if($r > 0){
        return true;
    }

每行完成后都会生成一个唯一的 ID。

最佳答案

首先在名称列上创建唯一索引:

ALTER TABLE property ADD UNIQUE KEY(name)

现在您可以使用 MySql INSERT ... ON DUPLICATE KEY UPDATE...

INSERT property (name, propertylocation, propertyrating, propertytype)
VALUES ($propertyname, $locationid, $ratingid, $typeid)
ON DUPLICATE KEY UPDATE 
    propertylocation = VALUES(propertylocation),
    propertyrating = VALUES(propertyrating),
    propertytype = VALUES(propertytype)

文档:http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

不要忘记清理数据库输入。

关于PHP 和 MYSQL 对于 UPDATE/INSERT IF EXISTS,此 MySQL 语法是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953700/

相关文章:

php - MYSQL 查询 - 排序然后选择相同值的随机数

python - 有没有像 Python 的 micro ORM 这样的 Dapper?

linux - 脚本中的 'if' 语句出现问题

PHP/MySQL - 在表中选择每种类型之一

php - 将数据从 1 个数组添加到另一个

MySQL 作为子查询运行查询比普通查询更快

python - while 语句之后的 else 语句,以及字符串与字符串列表的比较?

javascript - 将嵌套的 if 语句转换为更优雅的 switch?

php - 使 PHPStorm 默认为 PHPunit 使用 PROJECT_FOLDER/phpunit.xml

php - mySQL:根据键/值表中的几个键进行选择