参数编号无效,重复更新时的 PDO 失败

2024-04-13

我在用户类中创建了以下函数:

public function update_usermeta($user_id,$user_profile)
    {
        $sql = 'INSERT INTO users_meta
                            (user_id,meta_key,meta_value)
                     VALUES (:user_id,:meta_key,:meta_value)
                         ON DUPLICATE KEY
                     UPDATE meta_value = :meta_value';

        foreach ($user_profile as $meta_key => $meta_value) {
            if ($meta_value == null OR $meta_value == "") {continue;}
            if ($meta_key == "identifier" OR $meta_key == "photoURL" OR $meta_key == "displayName" OR $meta_key == "email") {continue;}
            $params = array(
                ':meta_key'   => $meta_key,
                ':meta_value' => $meta_value,
                ':user_id'    => $user_id
            );
            $this->mysql_execute_query($sql,$params);
        }
}

插入工作正常,但我对 ON DUPLICATE 部分有问题,它出错了:

SQLSTATE[HY093]: Invalid parameter number

显然问题是我的参数多于更新所需的参数。我该如何解决这种情况?


@CertaiN 提到,real准备,非模拟的,你不能用相同的名称多次绑定相同的变量。您可以选择将其与其他名称绑定,但此查询不需要它。The VALUES()函数返回本来插入的值 https://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_values,这将进行以下查询:

    $sql = 'INSERT INTO users_meta
         (user_id,meta_key,meta_value)
       VALUES (:user_id,:meta_key,:meta_value)
       ON DUPLICATE KEY
       UPDATE meta_value = VALUES(meta_value)';

如果需要,可以用于更多列,如下所示:

    $sql = 'INSERT INTO users_meta
         (user_id,meta_key,meta_value)
       VALUES (:user_id,:meta_key,:meta_value)
       ON DUPLICATE KEY
       UPDATE 
         meta_value = VALUES(meta_value),
         meta_key = VALUES(meta_key)';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

参数编号无效,重复更新时的 PDO 失败 的相关文章

随机推荐