我在用户类中创建了以下函数:
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(使用前将#替换为@)