2011-09-23 4 views
0

내 아약스 응용 프로그램과 함께 작동하도록 오히려 간단한 쿼리를 가지고 있지만, 그것은 다음과 같은 오류 제공 :WHERE 구분 기호로 여러 열을 선택하면 MySQL 구문 오류가 발생합니까?

:

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 'desc, price FROM products WHERE id='asfasfasf1'' at line 1

단순히 아무 곳이나 구문 오류를 볼 수 I로 이것에 의해 발견 해요을 이 객체 안에, 당연히

function query($query){ 
     $link = mysql_connect($this->host, $this->username, $this->password); 
     $connected = mysql_select_db($this->database, $link); 
     if(!$connected){ 
      die("Error: selecting database."); 
     } 
     $q = mysql_query($query); 
     if(!$q){ 
      return "Error: ".mysql_error(); 
     } 
     $result = mysql_fetch_assoc($q); 
     return $result; 
    } 

,하지만 아무것도 할 수 없습니다해야 다음과 같이

echo json_encode($this->query("SELECT name, desc, price FROM products WHERE id='".$id."';"), JSON_FORCE_OBJECT); 

쿼리는()입니다. query()가 다른 코드와 여러 번 사용되어 잘 작동하기 때문에 모든 필드가 정확합니다. 데이터베이스를 연결할 수 있습니다. 도와주세요.

+0

1) SQL 문을 세미콜론으로 끝내지 않아도된다고 생각하지 않습니다. 2) 쉼표가 실제로 쉼표인지 확인하고 있습니까? 3) 생성 된 쿼리를 출력하고 phpmyadmin에서 실행 했습니까? – naivists

답변

2

desc은 (내림차순으로 정렬.) SQL의 키워드를 당신이 열 이름으로 사용하려고하는 경우, 그것을 인용 시도 :

$this->query("SELECT name, `desc`, price FROM products WHERE id='".$id."';") 

이 거의 동일한 예를 들어 the MySQL manual on reserved words를 참조하십시오, 키워드를 다루는 방법에 대해 자세히 알아보십시오.

또는 열의 이름을 "설명"으로 바꿀 수 있습니다. 인용 부호가 "올바른"해결책 인 것처럼 일반적으로 예약어를 열 이름으로 사용하는 것을 피하는 것이 좋습니다.

+0

정말 고마워요, 나는 (전 데이터를 분류하기 위해 그것을 사용했음을) 눈치 채지 못했다고는 믿을 수 없습니다! 나는 테이블 이름을 바꿀 것이다. 고맙습니다. – Nisk

0

id은 큰 따옴표로 묶어야합니다. 단 하나가 아니어야합니다.

사실 SQL 인젝션 공격을 매우 쉽게 만들기 때문에 이런 종류의 일에주의하십시오.

+0

걱정하지 마세요, 입력을 이스케이프 처리했으며이 기능은 관리자 만 액세스 할 수 있습니다 :-) – Nisk

관련 문제