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

Смежные вопросы