2014-02-11 3 views
0

order_id이 중복 행이 삽입되지 않도록 order_id이 데이터베이스에 존재하지 않으면 MySQL에만 INSERT 값이 필요합니다. order_id이 발견되면 기존 데이터 필드를 덮어 써야합니다. order_id은 모든 경우에 고유해야합니다.MySQL 테이블에 삽입하여 중복시 덮어 쓰기

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

$statement = $db->prepare("INSERT INTO carts VALUES(:order_id, :items, :shipping, :price)"); 
$params = array(
    ':order_id' => $_SESSION['order_id'], 
    ':items' => Array(), 
    ':shipping' => '0', 
    ':price' => '0' 
); 
if($statement->execute($params)) { 
    return true; 
} 
else 
{ 
    return false; 
} 
+0

'INSERT .. ON DUPLICATE KEY UPDATE'? –

+1

'replace into'로 변경하십시오. – starshine531

답변

3

먼저 테이블의 기본/고유 키가 order_id인지 확인하십시오. 기존 필드를 덮어 쓰려면 다음과 같이 쿼리를 작성해야합니다.

INSERT INTO carts VALUES(:order_id, :items, :shipping, :price) ON DUPLICATE KEY UPDATE items = values(items), shipping = values(shipping); 

위의 쿼리는 다른 열의 값을 덮어 씁니다.

+0

흥미 롭습니다. '이 테이블에는 고유 한 열이 없습니다.'라는 오류 메시지가 나타납니다. phpmyadmin; 그것을 달성하는 방법을 모르겠지만, 나는 약간의 연구를 할 것입니다. 매우 감사합니다! 이것은 유망 해 보입니다. – Jamus

+0

테이블을 변경하고 order_id 열에 기본/고유 키를 추가해야합니다. – Srinivas

+0

이것은 완벽합니다. 나는 그 일을했으며 효과가 있습니다. 매우 감사합니다! – Jamus

관련 문제