2009-06-18 3 views
2

일부 데이터를 검색하기 위해 일부 PHP 코드에 삽입 한 SQL 쿼리에 문제가 있습니다. 쿼리 자체는 SQL 내에서 완벽하게 작동하지만 PHP 스크립트 내에서 쿼리를 사용할 때 "쿼리의 오류"에 전체 SQL 문을 암송합니다. 오류 메시지의 SQL 문을 복사하여 MySQL에 직접 붙여 넣으면 오류없이 실행됩니다.SQL에서는 작동하지만 PHP에서는 작동하지 않는 쿼리

내 연구에서 어딘가에 아포스트로피가 없어서 PHP가 절을 혼동시킬 수는 있지만 필자는 어디에 삽입해야하는지 충분히 알지 못합니다.

이 쿼리는 앞에서 PHP 스크립트에서 지정한 $ userid라는 변수를 사용하고 있습니다.

$sql= <<<END 

SELECT sum(final_price) 
FROM (
    SELECT Table_A.rated_user_id, Table_B.seller, Table_B.final_price 
    FROM Table_A 
     INNER JOIN Table_B ON Table_A.id=Table_B.id 
) AS total_bought 
WHERE seller != $userid 
AND rated_user_id = $userid 

    UNION ALL 

SELECT sum(final_price) 
FROM (
    SELECT Table_A.rated_user_id, Table_C.seller, Table_C.final_price 
    FROM Table_A 
     INNER JOIN Table_C ON Table_A.id=Table_C.id 
) AS total_bought 
WHERE seller != $userid 
AND rated_user_id = $userid 

END; 

이 섹션이 끝난 후 스크립트는 출력을 정의하고 평소와 같이 필요한 부분을 에코합니다. 코드의 마지막 부분은 다른 곳에서도 작동하므로 만족 스럽지만 문제는 위 섹션에있는 것처럼 보입니다.

누구든지 오류를 발견 할 수 있습니까?

편집

은 다음과 같은 추가 정보를 추가 :

필드의 모든 숫자 값이다, 아무도는 텍스트 없습니다. 나는 '$ userid'를 넣으려고했으나 오류 결과 내에서이 값을 중심으로 오류를 표시합니다. 문제는 동일하게 유지됩니다. parenthasis를 추가하는 것도 도움이되지 못했습니다. 나는 내 질문을 게시하기 전에 약간의 시행 착오를했다. 도움이된다면 다음과 같이

는, 사용되는 코드 bieng의 마지막 부분은 다음과 같습니다

내 생각
$result = mysql_query($sql); 
if (!$res) { 
    die('Error: ' . mysql_error() . ' in query ' . $sql); 
} 
$total_bought = 0; 
while ($row = mysql_fetch_array($result)) { 
    $total_bought += $row[0]; 
} 
$total_bought = number_format($total_bought, 0); 
echo '<b>Your purchases: ' . $total_bought . '</b>'; 
echo "<b> gold</b>"; 

답변

0

, 당신은 어딘가에 질의를 보내고 echo()있어 복사 - 붙여 넣기 브라우저에서 그것을. $userid에 xml 태그가 포함되어있을 수 있습니까? 그들은 브라우저에 표시되지 않을 것입니다, 당신은 그들을 발견하기 위해 페이지 소스를 봐야 할 것입니다.

0

$ userid quoted를 사용하여 테스트해야하며 두 문을 괄호로 묶어야합니다.

0

rated_user_id가 숫자 필드이지만 판매자 유형이 무엇입니까? 문자 필드라면 streetpc가 제안한대로 $ userid를 따옴표로 묶어야합니다.

확인해야 할 또 다른 사항은 쿼리의 각 줄에 줄 끝 뒤에 적어도 하나의 공백이 있어야한다는 것입니다. 그것은 저를 전에 넘어지게했습니다. 때로는 편집자/IDE에서 데이터베이스 도구로 이동할 때 이러한 문제가 자동으로 처리됩니다. 당신은 !$res 확인하고

8

, 그것은 !$result해야한다 :

$result = mysql_query($sql); 
if (!$result) { 
    die('Error: ' . mysql_error() . ' in query ' . $sql); 
} 
+0

재미 & 일반적인 실수 :) – Dor

관련 문제