2015-02-11 62 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