2017-11-14 3 views
-2

나는 buildTracker라는 데이터 테이블을 가지고 있습니다. PHP 폼 제출을위한 데이터를 게시하여 새 ID/행을 만듭니다. 그만큼 훌륭합니다. 두 번째 형태는 편집을 위해 기존 행을 가져옵니다 -중복 키 업데이트시 업데이트하는 대신 새 행을 만듭니다.

을하지만 대신 기존 행을 업데이트, 그것은 새 행과 새 키 (ID)

를 생성하는 방법은 새 행을 만들지 않고 업데이트 할 수있는 키를 얻을 수 있습니다 ?

$enteredBy = $conn->real_escape_string($_POST['enteredBy']); 
    $query = "INSERT into buildtracker (EnteredBy) 
    VALUES('" . $enteredBy . "') 
    ON DUPLICATE KEY UPDATE EnteredBy='" . $enteredBy . "'"; 

$success = $conn->query($query); 

어디서 업데이트가 잘못 되었나요? 당신은 update를 찾고 있습니다

+0

https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html –

+2

테이블에 대한 고유 색인을 정의 했습니까? –

+0

그리고 mysqli_error ($ conn)와 관련된 에러? –

답변

1

DataTable의 행 (키) ID와 EnteredBy (텍스트)를 포함, 나는 생각한다.

UPDATE buildtracker 
    SET EnteredBy = ? 
    WHERE <some column> = ?; 

<some column> = ?를 업데이트하려면이 행을 식별하는 것입니다 : 같은 업데이트가 보일 것이다. 테이블이 하나의 행만 포함되어있는 경우에만이 작업을 수행 할 수 있습니다.

?을 사용하면 매개 변수를 사용해야 함을 나타냅니다. 입력 값으로 쿼리 문자열을 무시해서는 안됩니다. 예상치 못한 구문 오류와 SQL 인젝션 취약점을 피하기 위해 매개 변수를 사용해야합니다.

1

테이블을 보면 buildTracker 테이블에 자동 증가 키 필드가 있습니다. 당신이 테이블에 묘사를한다면, 그것은 그것이 보여줄 것이라고 생각합니다. 날짜를 삽입한다는 사실은 자동 증가가 실행됨을 의미하며 복제본을 만들지 않습니다. EnteredBy를 기본 키로 사용하는 경우 해당 $ enteredBy가있는 위치를 항상 업데이트해야합니다.

+0

자동 증가 ID가 기본 키입니다. POST 메시지를 통해 해당 데이터를 전달하지 않습니다. – BR89

+1

정확합니다. 기본 키가 아닌 값을 삽입하면 절대 업데이트하지 않고 항상 삽입 할 수 있습니다. 왜? 자동 증가는 insert 문에서 실행되고 절대로 업데이트를 실행하지 않기 때문입니다. 당신이 원하는 것을 성취하기 위해서, 당신은 키에 기반한 행을 업데이트해야만한다. 이것을 위해서 속독 업데이트에 삽입을 사용할 수 없다. –

관련 문제