代码之家  ›  专栏  ›  技术社区  ›  emma

PDO如果id不存在,则在重复更新时插入行else[重复]

  •  0
  • emma  · 技术社区  · 7 年前

    function updateorcreate($table,$name,$value){
        global $sodb;
        $pro = $sodb->prepare("UPDATE `$table` SET value = :value WHERE field = :name");
        if(!$pro){
            $pro = $sodb->prepare("INSERT INTO `$table` (field,value) VALUES (:name,:value)");
        }
        $pro->execute(array(':name'=>$name,':value'=>$value));
    }
    

    它不会检测更新函数是否要与 if(!$pro);

    0 回复  |  直到 13 年前
        1
  •  19
  •   Fluffeh    13 年前

    $pro

    话虽如此,如果您使用的是mysql,那么您可以使用 insert... on duplicate key update 语法。

    insert into $table (field, value) values (:name, :value) on duplicate key update value=:value2
    

    不能两次使用同一个绑定参数,但可以将两个绑定参数设置为相同的值。

    只有 存在密钥(主密钥或其他唯一密钥)并会导致插入失败的工作。

        2
  •  2
  •   Louis Huppenbauer    13 年前

    如果是mysql,你可以尝试插入到。。。重复密钥更新时

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

        3
  •  0
  •   Sherlock    13 年前

    除此之外,这是一种狡猾的做法。最好先启动一个事务,进行选择,然后确定要做什么(插入或更新)。仅仅检查UPDATE查询是否成功是不够的,当没有找到行时它也会成功。

        4
  •  0
  •   FirmView    13 年前

        PDO::exec() 
    

    如果插入,则返回1。 如果行已更新,则返回2。

    对于准备好的报表,

        PDOStatement::execute() 
    

        PDOStement::rowCount()
    
    推荐文章