2015-02-11 64 views
-1
$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_at,created_at应该保持第一次创建数据的时间,以任何方式跳过文件?当使用REPLACE INTO

回答

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(); 
+0

它的工作,非常感谢:) – Chan 2015-02-11 07:59:51