2011-02-22 5 views
1

왜 이것이 작동하지 않는지 알 수 있습니까?PHP mysql WHERE 절 오류

$category = 1; 
$CategoryResult = mysql_query("SELECT * FROM Category WHERE Index = '$category'"); 
if (!$CategoryResult) 
    die("Could not retrieve results from category $category: " . mysql_error()); 

MySQL의 오류를 다음과 같이

카테고리 1의 결과를 검색 할 수 없습니다 : 당신은 당신의 SQL 구문에 오류가 있습니다; 올바른 구문을 찾으려면 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. 1 행에서 'Index ='1 ''근처에서 사용하십시오.

인덱스는 테이블 카테고리의 자동 증가 기본 키입니다.

답변

2

$category = 1; 
$CategoryResult = mysql_query("SELECT * FROM Category WHERE `Index` = $category"); 
if (!$CategoryResult) 
    die("Could not retrieve results from category $category: " . mysql_error()); 

은 일반적으로 내가는 mysql_real_escape_string에 대해 설교 할 코드해야하지만, $ 범주 (예 : 다른 쿼리 등) 컨트롤에서 인 경우 - 그리고 그것의 int로 보장됩니다, 이 코드는 안전합니다.

  • Index는 예약어 - 그것은 하지 인용 수치를 수행
  • 을 backticked해야합니다. MySQL에는 숫자와 비교되는 (문자열) 리터럴을 변환하는 규칙이 있지만 규칙에 익숙하지 않으면 적절한 숫자를 사용하십시오.

select * from 
(
select 1 `index` 
union all 
select 2 
union all 
select 3 
) X 
where `index` = '1-2-3-4' 
    or `index` = '3.0Y!' 

출력

`index` 
1 
3 
+0

마지막 진술이 잘못되었습니다. MySql은이를 숫자로 변환합니다. –

+0

@ 스크럼 마이스터 - 네 말이 맞아. 대신 경고/권장 사항을 작성하도록 답변을 업데이트했습니다. – RichardTheKiwi

3

어쩌면 index는 예약어입니다. 이

$CategoryResult = mysql_query("SELECT * FROM Category c WHERE c.`Index` = '$category'"); 

을 시도하고 인덱스가 문자열이나 내가 볼 수있는 정수

+0

이것은 아마도 그 것이다. 'index'는 매우 나쁜 칼럼 이름입니다. 나는 그것을 바꿀 것입니다. –

1

두 문제가 있는지 확인. 기본 키인 경우 WHERE Index = ". $ category."를 사용해야합니다.

두 번째로 인덱스는 MySQL의 예약어입니다.

1

Index은 MySQL 키워드이므로 반드시 인용해야합니다. 같은 :

SELECT * FROM Category WHERE `Index` = $category; 

그리고 작은 따옴표는 $category 숫자입니다 가정, 불필요하고 ANSI SQL에 호환되지 않습니다.