php - 使用 ON DUPLICATE KEY UPDATE 查询
问题描述
我想在我的插入查询上使用 ON DUPLICATE KEY UPDATE,但显示错误“SQLSTATE [HY000]:一般错误:2031 SQLSTATE [HY000]”。我的查询代码是:
foreach ($update_config_array as $a => $b){
$temporary_data =array(
"a" => $a,
"b" => $b
);
$insert_update_query = "INSERT INTO `tbmedia_config` (`config_name`,`config_value`) VALUES (:a,:b) ON DUPLICATE KEY UPDATE `config_name` = :a , `config_value` = :b";
$conn->Tbmedia_runquery($insert_update_query,$temporary_data);
我的渲染查询方法是:
// Execute query
public function Tbmedia_runquery($query_body = "" , $parameter_array = "" ){
$query = $query_body;
try{
$stmt = $this->Tbmedia_connection->prepare($query);
if(is_array($parameter_array)){
// declare bind_param variable
foreach ($parameter_array as $key => &$value) {
$stmt->bindParam(":$key",$value);
//':$key'
}
}
$stmt->execute();
return $stmt;
}catch (\Exception $e){
echo $e->getMessage();
}
}
我哪里错了?
解决了问题就在这里,不能使用相同的变量进行插入和更新换句话说,不能使用:a 和 :b 相同的插入和 ON DUPLICATE KEY UPDATE 而不是使用此代码:
foreach ($update_config_array as $a => $b){
$temporary_data =array(
"a" => $a,
"b" => $b,
"c" =>$a,
"d" =>$b
);
$insert_update_query = 'INSERT INTO `tbmedia_config` (`config_name`,`config_value`) VALUES (:a,:b) ON DUPLICATE KEY UPDATE `config_name` = :c , `config_value` = :d';
$conn->Tbmedia_runquery($insert_update_query,$temporary_data);
}
解决方案
您不能在一个查询中使用相同的参数名称。这意味着,如果您在“VALUES(:a, :b)”中使用了“:a”,则不能在“ON DUPLICATE KEY UPDATE config_name = :a”中第二次使用它。
正确的查询是:
INSERT INTO
tbmedia_config (config_name, config_value)
VALUES
(:a,:b)
ON DUPLICATE KEY UPDATE
config_name = VALUES(config_name), config_value = VALUES(config_value)
如果您在 SQL 中使用config_name = VALUES(config_name)
,它将代替VALUES(config_name)
您传递的值作为:a
.
推荐阅读
- css - 如何在 css 中制作倒圆效果,就像指定的图像一样
- javascript - 汉堡按钮上的反向动画
- c++ - 无论条件是否为真,如果总是在 C++ 中执行
- mysql - 如何在同一列中查找和替换一列的值(Wordpress wp_postmeta 表)
- php - 字符后拆分数组
- python - 训练时 Keras 神经网络精度始终为 0
- php - Omnipay 与 Aimeos 电子商务的集成
- python - 解析 xml 文件并使用检索到的数据提供对象列表
- python - pd.to_datetime 不将 datetime 转换为 int 以进行 df.rolling 计算
- php - 如何将我的国家/地区数组放入