2012-12-16 3 views
-2

저는 초보자입니다. 첫 번째 SQL 쿼리를 시작할 때이 문제에 직면했습니다.MySQL 선택 오류

페이지의 데이터베이스 쿼리에 실패했습니다. SQL 구문에 오류가 있습니다. 나는 모든 검사

$page_set = mysql_query(
    "SELECT * FROM pages WHERE subject_id = {[$subject'id']}", $connection 
); 

: 내 SELECT 명령이 1

줄에서 '}'[ 'ID]'근처를 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인 데이터베이스 테이블과 모든 것이 올 바릅니다. 이 쿼리는 작동이 같은

$page_set = mysql_query("SELECT * FROM pages" ,$connection) 
+2

귀하의 변수가 완전히 잘못되었습니다가. 바깥 괄호 {}는 정확하지만 안쪽 괄호 []는 'id'만 둘러 쌉니다. – imkingdavid

답변

0

PDO Tutorial for MySQL Developers는 향후이 같은 별도의 변수에 쿼리 문자열을 만들 :

$res = mysql_query($sql); 

경우 :

$sql = "SELECT * FROM pages WHERE subject_id = {[$subject'id']}"; 

는 다음과 같은 쿼리를 실행 이렇게하면 다음과 같이 완전히 해결 된 쿼리 문자열을 볼 수 있습니다.

if (!$res) die("FAIL: $sql BECAUSE: " . mysql_error()); 

당신은 이어야합니다.는 결과 값을 mysql_query()에서 테스트해야합니다. 이것은 블랙 박스가 아닙니다. 그것은 통제 할 수없는 이유로 인해 실패 할 수 있습니다. 오류가 발생하면 오류를 인식하고 오류 조건을 처리하려고합니다.

Siedbar note : PHP가 mysql 확장을 사용하지 않으므로 현재 또는 향후 작업을 위해 PDO 또는 MySQLi를 선택하십시오.

그리고 당신은 PHP를 처음 사용하는 경우, 이것은 당신이 시작하는 데 도움이 정말 좋은 책이다 : http://www.sitepoint.com/books/phpmysql5/

+1

알림 : {$ subject [ 'id']} –

+0

@ 레이 : 방금 편집 : 인사말이 필요하지 않습니다. (심지어는 권장하지 않습니다.) – hakre

+0

@hakre : 아직 이해할 수 없습니까? 이 질문의 저자에게 오류를 감지하고 시각화하는 방법을 보여 주려고합니다. 물고기를주는 것에 대해 물고기를 가르치는 것에 관해서는 –

2

시도 뭔가 :

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection); 

이 ID가 내가 추측하고있는 $ 대상 배열의 항목이 여기에 대한려고하고있는 무슨이다 있다고 가정합니다. 나는 그 중괄호 "{"가 필요하다고 생각하지 않지만 where 절의 값에 대해서는 작은 따옴표가 필요할 수도 있습니다. 이 나던 작품은, 실행중인 SQL 명령에서 반향 시도하고 당신이 문제를 볼 수 있어야합니다 (또는뿐만 아니라 당신의 문제의 SQL 명령을 게시 할) 경우에도

,

+2

을 이스케이프 처리해야합니다. – prodigitalson

+1

$ subject [ 'id']가 정수인 경우 'and'안에 넣지 마십시오. – imkingdavid

1

,

이 시도
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '" . $subject['id'] . "'", $connection); 

이 코드는 SQL Injection에 취약 있음을 경고, 그것을 방지하는 방법을 알아 보려면 아래 문서를 참조하십시오

+0

$ subject [ 'id']을 {}에 감쌀 필요가 없습니까? – imkingdavid

+0

어레이 이후로 그는'{}'이 필요합니다. – prodigitalson

+0

아, 편집하면 필요 없다. 그럼, 신경 쓰지 마라. – imkingdavid

0
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = {$subject['id']}", $connection); 
0

의 위의 모든 작동하지만 나 자신을 선호하는 가장 깨끗한 방법은 할 수 있습니다 :

$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '".$subject['id']."'", $connection); 

또는 초보자로서 당신을 위해 내 추천 :

$subject_id = $subject['id']; 
$page_set = mysql_query("SELECT * FROM pages WHERE subject_id = '$subject_id'", $connection); 

내가 작성한 두 번째 방법을 사용하는 것이 좋습니다. 그것은 가장 훌륭하고 깨끗한 습관입니다.

참고 : mysql_extention은 공식적으로 가치가 떨어집니다. mysqli 또는 PDO를 사용해야합니다. (http://nl3.php.net/manual/en/function.mysql-query.php)

0

SELECT 명령이 아닙니다. 그것은 PHP mysql_query 명령어이다. 먼저 SQL을 작성, 다음으로 데이터베이스를 조회 :

$sql = "SELECT * FROM pages WHERE subject_id = {[$subject'id']}"; 
$page_set = mysql_query($sql, $connection); 

그런 다음 오류가 발생하면, 당신은 그냥 출력 $sql 수 그것이 어떻게 보이는지 확인한다. 오류 메시지와 비교하여 SQL 쿼리의 건물을 수정하십시오.

변수 출력이 어떻게 수행되었는지에 대한 영감을 얻으려면 see an existing answer.

더 이상 사용되지 않는 (오랫동안 오래되어 지원되지 않는) mysql_* 기능 대신 PDO를 사용하면 더 쉽게 사용할 수 있습니다. 특히 매개 변수가있는 쿼리가 SQL 명령을 작성하는 데 도움이되므로 mysql_* 함수는 지원하지 않습니다. 튜토리얼을 참조하십시오

: