php pdo简单插入或更新函数

olhwl3o2  于 2021-06-23  发布在  Mysql
关注(0)|答案(4)|浏览(373)

在尝试创建一个简单的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); 我们怎样才能让这个工作。

ukqbszuj

ukqbszuj1#

如果是mysql,你可以尝试插入到。。。重复密钥更新时
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

ni65a41a

ni65a41a2#

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

3npbholx

3npbholx3#

尝试,

PDO::exec()

如果插入,则返回1。如果行已更新,则返回2。
对于准备好的报表,

PDOStatement::execute()

你可以试试,

PDOStement::rowCount()
kognpnkq

kognpnkq4#

您正在分配 $pro 准备语句,而不是执行语句。
话虽如此,如果您使用的是mysql,那么您可以使用 insert... on duplicate key update 语法。

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

不能两次使用同一个绑定参数,但可以将两个绑定参数设置为相同的值。
edit:这种mysql语法只适用于存在键(主键或另一个唯一键)并且会导致插入失败的情况。

相关问题