mysql
2013-04-08 2 views 2 likes 
2

내가 IF는 MySQL의 존재를 사용하려고하지만 난 구문 오류가 계속 나는 올바른 구문 제외한 모든 밤은 작업에 대한 연구가 ...mysql이 존재하면 오류가 잘못된 구문을 제공합니까?

내가 필요로 무엇입니까 : 쿼리가 존재 경우 다른 UPDATE 새로운 넣습니다. ..

$queryString = "IF EXISTS (SELECT * FROM $ONCALL_TABLE WHERE uid='$contextUser' AND submitid='$submitid' AND submitstatus=3) THEN UPDATE $ONCALL_TABLE SET uid='$contextUser', start_time='$onStr', end_time='$offStr', amount='$amount' ELSE INSERT INTO $ONCALL_TABLE (uid, start_time, end_time, amount) VALUES ('$contextUser','$onStr', '$offStr', '$amount') END IF"; 

오류 메시지 : 쿼리를 수행 할 수 없습니다 : 당신은 당신의 SQL 구문에 오류가 있습니다; 'IF EXISTS (SELECT * FROM timesheet_oncall WHERE uid ='admin '및 submitid ='136545 'at line 1 근처에서 사용할 올바른 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하십시오.

+0

'$ contextUser' (http://bobby-tables.com/php)와 다른 변수가 SQL에 삽입 되었습니까? 자리 표시자를 사용하지 않고 쿼리를 작성하면 재앙을 피할 수 있습니다. – tadman

답변

2

REPLACE INTO이 필요합니다. 테이블에있는 오래 된 행은 PRIMARY KEY 또는 UNIQUE 인덱스에 대한 새 행 값이 같다면 새 행을 삽입하기 전에, 기존의 행이 삭제 된 것을 제외하고 http://dev.mysql.com/doc/refman/5.0/en/replace.html

, 정확히 INSERT 같은 작품을 교체 .

귀하의 경우

uid 가정
REPLACE INTO 
$ONCALL_TABLE (uid, start_time, end_time, amount) 
VALUES ('$contextUser','$onStr', '$offStr', '$amount') 
WHERE uid='$contextUser'; 

PRIMARY KEY 또는 UNIQUE KEY

주 : 당신의 질문의 코드가 SQL 주입 결함을 포함 때문에 나는이 기사를 읽어보실 것을 추천 할 것입니다. http://php.net/manual/en/security.database.sql-injection.php

+0

존재하는 경우 (선택 ...)로 대체 하시겠습니까? – rubberchicken

+0

감사합니다. 매우 도움이되는 – rubberchicken

관련 문제