【发布时间】:2013-10-23 11:41:32
【问题描述】:
我正在使用 MySQL 查询来插入或更新记录(如果已存在)。
问题是,我不想更新我的 'created' 日期时间字段。
我的活动数据:
$event = [
'userId' => $this->userId,
'googleEventId' => $googleEventId,
'isAppointment' => $isAppointment,
'eventTitle' => $title,
'eventLocation' => $location,
'eventDescription' => $description,
'eventStart' => $start,
'eventEnd' => $end,
'created' => date('Y-m-d H:i:s'), // This field should be ignored when updating
'updated' => date('Y-m-d H:i:s')
];
我正在使用此函数插入或插入更新重复键($update 参数):
public function insert($table, $data, $update = 0)
{
ksort($data);
$fieldNames = implode(', ', array_keys($data));
$fieldValues = ':' . implode(', :', array_keys($data));
$updateOnDuplicate = '';
if ($update)
{
$updateOnDuplicate = ' ON DUPLICATE KEY UPDATE ';
foreach ($data as $key=> $value) {
$updateOnDuplicate .= "$key=:$key,";
}
$updateOnDuplicate = rtrim($updateOnDuplicate, ',');
}
$stmt = $this->prepare("INSERT INTO $table ($fieldNames) VALUES ($fieldValues) $updateOnDuplicate");
foreach ($data as $key => $value)
{
$stmt->bindValue(":$key", $value);
}
$stmt->execute();
return $stmt->rowCount();
}
我想我需要以某种方式检测此函数中的'created' 字段。
【问题讨论】:
-
获取已经存储的信息,然后将该值作为更新值放入
-
您尝试插入的表中的键是什么,您当前拥有的 INSERT 语句是什么?
-
unset($event[$created]) 更新?你是如何强迫你的查询..我们无法猜测只看到 1 个数组..显示查询方式
-
对不起,请参阅我的编辑以了解我使用的插入/更新功能。
-
应该可以,当您循环遍历要为 ODKU 更新的字段时,只需跳过“创建”字段,例如
if ($key!='created') { $updateOnDuplicate .= "$key=:$key,";}