2012-04-22 2 views
0

를 삽입 update- 중복 키에 내가 가진 : 나는 아래의 코드를 사용하면 id (auto int index), user_id (P.key and links to other table), Doc_Name, abstract삽입 ... 반복적으로 내 문서 테이블에서

, 그냥 내가 그것을해야 할 때 동일합니다 USER_ID이가 너무 다른 행을 삽입 업데이트되었습니다. 분명히 ID는 자동 int이므로 번호가 그대로 유지되고 이것이 작동하지 않는 이유와 관련이 있는지 확실하지 않습니다.

$the_query = sprintf("INSERT INTO `document` (`user_id`,`Doc_Name`,`abstract`) 
VALUES ('%d','%s','%s')",'$user_id', '$Doc_Name', '$abstract') 
ON DUPLICATE KEY UPDATE 
user_id=user_id+'$user_id', 
Doc_Name=Doc_Name+'$Doc_Name', 
abstract=abstract+'$abstract' " 
); 
+1

당신은'SHOW CREATE TABLE Document' –

+0

전체 테이블 코드의 출력을 보여줄 수 있습니까? – user1296762

답변

0

카고 컬트 프로그래밍? % 자리 표시 자없이 sprintf()를 사용하는 것은 .... 잘못된 것입니다. 또한 업데이트 된 필드에 추가 된 이유는 무엇입니까?

MySQL은 연결을 위해 concat()을 사용합니다. +은 순전히 수학적 연산입니다. 'a' + 'a'을 쓰면 aa이 아니며 0이 표시됩니다. user_id 고유 필드가 테이블에있는 경우

+0

% 자리 표시자를 가지고 있지만 작동하지 않지만 다시 넣을 수 있습니다. 편집 됨 – user1296762

0

, 쿼리는 다음과 같이한다 :

$query = sprintf(" 
INSERT INTO 
    `document`(`user_id`, `Doc_Name`, `abstract`) 
VALUES 
    ('%s', '%s', '%s') 
ON DUPLICATE KEY UPDATE 
    `Doc_Name` = VALUES(`Doc_Name`), 
    `abstract` = VALUES(`abstract`) 
", $user_id, $Doc_Name, $abstract); 
+0

세션이 실행 중이면'WHERE id = '$ _ SESSION [user_id]'와 같은 내용을 추가해야합니다. 위의 코드에서 – user1296762

+0

위의 코드를 변경했습니다. 이제는 다른 쿼리를 the_query로 변경했습니다. 다른 행을 추가하기 만하면 – user1296762

+0

ok, 다음 고유 필드를 추가해야합니다. 'ALTER TABLE document ADD UNIQUE (user_id)' –

관련 문제