在尝试创建一个简单的php pdo update函数时,如果找不到字段,就会插入它,我创建了这个小片段。
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条答案
按热度按时间ukqbszuj1#
如果是mysql,你可以尝试插入到。。。重复密钥更新时
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
ni65a41a2#
你首先需要执行它。
除此之外,这是一种狡猾的做法。最好先启动一个事务,进行选择,然后确定要做什么(插入或更新)。仅仅检查update查询是否成功是不够的,当没有找到行时它也会成功。
3npbholx3#
尝试,
如果插入,则返回1。如果行已更新,则返回2。
对于准备好的报表,
你可以试试,
kognpnkq4#
您正在分配
$pro
准备语句,而不是执行语句。话虽如此,如果您使用的是mysql,那么您可以使用
insert... on duplicate key update
语法。不能两次使用同一个绑定参数,但可以将两个绑定参数设置为相同的值。
edit:这种mysql语法只适用于存在键(主键或另一个唯一键)并且会导致插入失败的情况。