2013-08-13 8 views
-3
<?php 
    $query = "SELECT * "; 
    $query .= "FROM subjects "; 
    $query .= "WHERE id='" . $subject_id ."' "; 
    $query .= "LIMIT 1"; 
?> 

문제의 원인이 라인에 있습니다 오류 : "데이터베이스 쿼리 실패 : 당신은 당신의 SQL 구문에 오류가있다;에 해당하는 설명서를 확인을하여 'LIMIT 1'1 번 근처에서 올바른 구문을 사용하기위한 MySQL 서버 버전PHP - 때문에 큰 따옴표 MYSQL 쿼리의 오류

그렇다면 왜 구문이 옳았는지. 그 오류를 감안할 때?!

+0

위의 정확한 쿼리를 사용하여 테스트 테이블을 통해 직접 테스트했습니다. 그것은 나에게 어떤 오류도주지 않는다. 아마도이 오류를 제공하는 쿼리가 아닙니다. – machineaddict

+1

이와 같은 디버깅 문제에 대해, 쿼리를 준비하거나 실행하기 직전에 간단한'echo $ query; '가 매우 유용 할 수 있습니다. 우리가 볼 필요가있는 것은 MySQL에 전달되는 실제 SQL 텍스트입니다. 이 오류는 여기에 표시되지 않은 코드 행에 의해 표시됩니다. – spencer7593

+2

@ spencer7593 : 1. 따옴표없이 2. 'echo'가 아닌'var_dump' – zerkms

답변

-4

당신은 당신뿐만 아니라 당신의 변수 후 2 세미콜론이 있고, 당신의 변수가 정수의 경우, 그것은 하나에있을 필요가 나던

<?php 
$query = "SELECT * "; 
$query .= "FROM subjects "; 
$query .= "WHERE id='$subject_id' "; 
$query .= "LIMIT 1"; 
    ?> 

을 사용할 수 있습니다 당신은 변수를 연결할 필요가 없습니다 따옴표도.

+3

그리고 코드는 ** 정확히 동일한 ** 쿼리를 생성합니다. 어떤 문제가 귀하의 코드에는 OP의 것이 있습니까? – zerkms

+0

먼저 OP가 무엇입니까? 두 번째 질문은 당신이 $ subject_id 주위에 썼던 작은 따옴표에 관한 것입니다. 왜 이런 식으로 작성해야합니까? 첫 번째 양식이 맞아야합니다! –

+0

@ 카림 엘 - 헤나와 : OP는 오리지널 포스터, 질문 작성자 – zerkms

0

오류 메시지는 질문에 표시되지 않은 코드 줄을 실행 한 것입니다.

하나의 명백한 가능성은이 코드에서 생성 된 문자열 값이 MySQL에 전달되지 않는다는 것입니다. 또 다른 가능성은 $subject_id에 SQL 텍스트로 해석되는 문자열 값이 포함되어 있고 $query에는 사용자가 생각하는 내용이 포함되어 있지 않습니다. 다른 많은 가능성이 있습니다.

이와 같은 디버깅 문제의 경우 실제로 오류가 발생하는 코드 줄을 식별해야합니다. (귀하의 경우에는 mysql_, mysqli 또는 PDO에 대한 호출이 함수 또는 메소드를 실행하거나 준비합니다.)

전달할 ACTUAL SQL 텍스트의 echo 또는 var_dump을 추가 할 수 있습니다 오류를 던지고있는 행 바로 앞의 행에있는 MySQL.

예를 들어, 당신은 수정이 코드 다음 코드 줄 경우이 오류 메시지가 표시 및 구문 분석 전이나 호출을 실행 할 쿼리에 두 번째 LIMIT 절을 추가 할 수 $query

$query .= " LIMIT 1"; 

, 이는 유효하지 않으며, 귀하가받는 것과 동일한 오류를 던질 것입니다.

반복 : 질문에 게시 된 코드 줄에 오류가 발생하지 않습니다. 게시 한 코드 행은 단순히 문자열 값을 변수에 할당하는 것입니다. (이것은 MySQL로 전달되는 문자열 값이 될 수 있지만, 우리는 당신의 코드에서 그 어느 곳을 볼 수 없습니다.) 당신은 INT 형식이 될 수 있습니다 'subject_id'를 사용하는

+0

패스되지 않으면 전혀 작동하지 않아야합니다. 하지만 작은 따옴표로 묶고 라운드로 $ subject_id를 의미합니다. 두 번째 $ subject_id는 정수이므로 따옴표로 묶을 필요가 없습니다. 권리 ? 이 라인은 "당신의 경우에는 mysql_, mysqli 또는 PDO가 실행되거나 준비 될 것입니다."라고 이해하지 못했습니다. –

+0

@Kareem El-Hennawy : 코드가 실행될 때'$ subject_id' 변수에 포함 된 값이 정수인지 어떻게 알 수 있습니까? null 일 수도 있고,''abc ''일 수도 있고,'0 '또는'1 '='1 '일 수도 있습니다. 그리고 우리는'$ query'가 나중에 코드에서 수정되는지 또는'$ query'가 MySQL에 전달되는지 여부에 대한 단서가 없습니다. 우리가 알다시피, 다음 코드 행을 사용할 수 있습니다 : $ query. = "LIMIT 1";'$ 쿼리가 MySQL에 전달되기 전에. – spencer7593

+0

@ KareemEl-Hennawy, 요청한 내용을 아직 게시하지 않은 이유는 무엇입니까? 적어도 쿼리를 실행하는 부분까지 전체 코드를 볼 수 있습니까? – vee

-1

일부 문제가 너무 subject_idLimit 0,1 대체 Limit 1를 사용합니다.

<?php 
    $query = "SELECT * "; 
    $query .= "FROM subjects "; 
    $query .= "WHERE id=" . $subject_id; 
    $query .= "LIMIT 0,1"; 
?> 
+0

시도했는데 작동하지 않습니다. 작은 따옴표에서 오는 오류입니다. 문제! 현재 통용되는 대답은 내가 전달하는 가치가 유효하지 않다는 것입니다. –

+0

귀하의 답변에 귀하의 웹 사이트에 대한 링크를 추가하지 마십시오. – ChrisF