在尝试创建一个简单的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);
,但它无法检测到我们如何才能使用此功能。
答案 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()