2011-04-30 3 views
1

문제 해결 PHP MySQL의 쿼리 : 내 PHP 스크립트를 통해내가이 쿼리를 실행하려고

$q1 = "INSERT INTO `Validation` (`Key`, `Status`, `Notes`, `Serial`) VALUES (max(Key)+1, 'Valid', '".mysql_real_escape_string($user)."', '0')"; 

,하지만 때마다 그것은이 오류가 표시

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Key)+1, 'Valid', 'USER', '0')' at line 1 

어떤 아이디어?

+5

자동으로 증가하는 ID를 시뮬레이션하려고합니까? 이 경우 열에 AUTO_INCREMENT를 사용하면됩니다. – robbrit

답변

2

키를 사용할 수 있는지 잘 모르겠습니다. 한 가지 방법은 INSERT 전에 SELECT 문을 사용하여 max (Key) 값을 찾는 것입니다. 또 다른 (바람직한) 방법은 데이터베이스가 자동으로 KEY 열을 증가하도록하는 것입니다.

+0

열에 자동 증가를 추가하려고 시도했지만이 오류에 대해 다음과 같이 설명합니다. # 1063 - 'Key'열의 잘못된 열 지정자 –

+0

어떤 열 유형이 Key입니까? 자동 증가가 작동하려면 (TINYINT, SMALLINT, INTEGER 또는 BIGINT) 중 하나 여야합니다. –

0

하위 쿼리를 사용해보십시오. 당신이 열 이름으로 골랐다 그래서 만약

$q1 = "INSERT INTO `Validation` (`Key`, `Status`, `Notes`, `Serial`) VALUES ((SELECT max(Key) FROM Validation)+1, 'Valid', '".mysql_real_escape_string($user)."', '0')"; 
4

KEY은 (역 따옴표로) 당신 해야 인용을, 모든 시간 MySQL reserved word입니다 :

$q1 = "INSERT INTO `Validation` (`Key`, `Status`, `Notes`, `Serial`) 
    VALUES (
     max(`Key`) + 1, 
     'Valid', 
     '".mysql_real_escape_string($user)."' 
     , '0' 
    )"; 

주 당신 돈 '은 역주와 함께 예약되지 않은 단어를 인용 할 경우입니다.

나는 이것이 실제로 작동하는지 확신 할 수 없다. MySQL이 하나의 쿼리에서 업데이트중인 동일한 테이블을 읽는 것을 여전히 금지하지 않습니까? 어쨌든, 코멘트에 언급 된 것처럼, 당신은 단지 what AUTO_INCREMENT does을 자동으로 복제하는 것처럼 보입니다. 대신 사용하는 것이 좋습니다.

관련 문제