2011-09-11 5 views
0

저는 실제로 MySql/MySqli를 사용하고 있습니다. 준비된 문을 사용하고 있습니다. 내 스크립트의 전체이 한 줄을 제외하고 잘 작동 : 나는 그 다음 mysqli_error($resource) 기능을 실행을 추적하는 수동으로 선의 발견하고,이 결과를 가지고"키"는 MySqli의 예약어입니까? 오류가 발생했습니다

if ($stmt = $con->prepare("SELECT bandHash, userHash, userPassHash, type FROM account_active WHERE key=?")) {

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=?' at line 1

제 1 행이라고 말하면 걱정하지 마십시오. 그것이 실행 된 방법 때문일뿐입니다. 실제로는 280 행입니다.

그래서 내가 이미 이와 같은 문을 사용하고 있기 때문에 "key"가 궁금합니다. 내가 할 수없는 예약어 사용합니까? 아니면 다른 곳에서 제 실수를 찾아야합니까?

단순한 예 또는 아니오 대답만으로도 충분합니다. 감사합니다.

+0

사실 그것은 SQL 쿼리의 1 행이기 때문입니다. –

+1

미래의 mysql 버전으로 인한 놀라움을 피하기 위해, "type"과 같은 예약 된 이름 일 수도있는 모든 컬럼 이름을 인용 할 때 유니폼처럼 보일 수 있습니다. –

+0

@tomalak Geret'kal은'key' 키워드를 뒷받침하는 backtick을 사용하는 것으로 문제가되지 않았습니다. 정말 1 행이라면'$ con' 변수를 어떻게 설정했는지 모르겠습니다. –

답변

1

난 당신이 자신을이를 보았다 수없는 이유를 모르겠지만 모든 곳에서 인용 된 이름을 사용하지 않도록 이름을 바꾸면 생각 하는데요, yes, key is a reserved word in MySQL .

이것에 대해 걱정할 필요가 없도록 필드 이름에 백틱을 사용해야합니다.

SELECT `bandHash`, `userHash`, `userPassHash`, `type` 
    FROM `account_active` 
WHERE `key` = ? 

이 방법은 문제를 해결할뿐만 아니라 더 명확한 느낌을 주며 (보시다시피) 구문 강조를 돕습니다.

관련 문제