PHP PDO简单的插入或更新功能

时间:2012-09-05 14:28:08

标签: php pdo insert-update

在尝试创建一个简单的PHP PDO更新函数时,如果找不到该字段会插入它,我创建了这个小片段。

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);,但它无法检测到我们如何才能使用此功能。

4 个答案:

答案 0 :(得分:14)

您将$pro分配给prepare,而不是execute语句。

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

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

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

编辑:这个mysql语法将工作,其中存在一个密钥(主要或另一个唯一)并导致插入失败。

答案 1 :(得分:2)

如果是mysql-only你可以尝试INSERT INTO ...在DUPLICATE KEY UPDATE

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

答案 2 :(得分:0)

您首先需要执行它。

除此之外,这是一种狡猾的方式。最好是启动事务,执行SELECT然后确定要执行的操作(INSERT或UPDATE)。只检查UPDATE查询是否成功是不够的,当没有找到行时它会成功。

答案 3 :(得分:0)

试,

    PDO::exec() 
如果插入,

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

准备好的陈述,

    PDOStatement::execute() 

你可以尝试,

    PDOStement::rowCount()