使用REPLACE INTO时跳过字段

时间:2015-02-11 07:34:16

标签: php mysql

$sql = REPLACE INTO `table` (`id`, `name`, `created_at`) VALUES (:id, :name, :created_at);
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $_POST['id']);
$stmt->bindValue(':name', $_POST['name']);
$stmt->bindValue(':created_at', date('Y-m-d H:i:s'));
$stmt->execute();

REPLACE INTO将检测主键是否存在然后更新它,如果不添加新记录,单独进行检查非常方便,但有些字段不应再次更新,例如create_atcreated_at应该保留第一次创建数据的时间,任何跳过文件的方式吗?

1 个答案:

答案 0 :(得分:3)

使用INSERT ... ON DUPLICATE KEY UPDATE Syntax。它使您可以更好地控制更新部分。 (也替换将删除你的行并创建一个新的,可以使用约束给出问题)

$sql = 'INSERT INTO `table` (`id`, `name`, `created_at`) VALUES (:id, :name, :created_at) ON DUPLICATE KEY UPDATE `name` = :name';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':id', $_POST['id']);
$stmt->bindValue(':name', $_POST['name']);
$stmt->bindValue(':created_at', date('Y-m-d H:i:s'));
$stmt->execute();