2010-12-20 14 views
0

PHP에서 사용할 때 sql 스크립트가 'sid'값을 반환하지 않지만 실제 데이터베이스와 비교하여 실행하면 값을 반환합니다. 나는 나의 실수가 어디인지 알 수 없다. 다음과 같이 내 테이블은 다음과 같습니다SQL 쿼리가 값을 반환하지 않습니다.

다음
Song 
aid (1) 
sid (999) 
title (Moonlight Sonata) 
surl 

Album 
aid (1) 
artist (Beethoven) 
genre (Classic) 
album 

내 코드입니다 :

$sql="SELECT S.title, S.surl, S.sid, A.aid, A.album, A.artist FROM challenge C, 
    song S, album A WHERE C.fid = '$uid' AND uid = '$user' AND date = '$date' 
    AND C.sid = S.sid AND S.aid = A.aid"; 

$result=mysql_query($sql); 

if (mysql_num_rows($result) != 0){ 
    while($row=mysql_fetch_array($result)){ 
    $title = $row[title]; 
    $album = $row[album]; 
    $surl = $row[surl]; 
    $artist = $row[artist]; 
    $aid = $row[aid]; 
    $sid = $row[sid]; 

echo "Album: $album Artist: $artist Title: $title Song: $surl SongID: $sid"; 
    } 
} 

모든 것이 값 'SID'를 제외하고 인쇄 - 그것은 어떤 도움을 크게 감상 할 수있다 999를 인쇄한다!

답변

3

$row[title]은 찾고자하는 구문이 아닙니다. enable error reporting에 정의되지 않은 상수에 대한 경고가 표시됩니다. title을 쓰면 PHP는 "title"이라는 constant을 찾습니다. 존재하지 않습니다. 그런 다음에 만 문자열로 돌아가서 문자열 'title'을 의미하는 경우 시도합니다. SID은 미리 정의 된 상수 일 수 있으므로 상수의 값을 사용하는 유일한 경우이며 해당 상수의 값이있는 인덱스가 배열에 없습니다.

문자열을 따옴표로 묶으십시오. $row['title']$row['sid']을 작성하십시오.

"Why is $foo[bar] wrong?"을 (를) 읽으십시오.
또한 SQL injection에 대한 기사를 읽고 의견을 피하십시오!

+0

감사합니다. 나는 기사를 읽을 것이다 - 나는 아직도 PHP에 익숙하다. 그래서 나는 아직도 배우고있다. 도와 줘서 고마워! – user457666

+0

@user 여러분, 천만입니다. 미래를 돕기 위해 : 오류보고를 사용하십시오! * all * 오류를 보려면'error_reporting (-1)'으로 설정하십시오. 오류가 나타나면 [매뉴얼] (http://www.php.net/manual/en/)을보십시오. 그것은 당신에게 많은 도움이 될 것입니다! – deceze

0

쿼리 ($ uid, $ user, $ date)에서 값을 이스케이프 처리하지 않고 그 중 하나 이상에 쿼리 구문을 위반하는 SQL 메타 문자 (아마도 ' 따옴표)가 포함되어 있습니다.

또한 mysql_query() 호출의 반환 값을 확인하고 성공했다고 가정합니다. 최소한, 당신은

$result = mysql_query($sql) or die(mysql_error()); 

또는

$result = mysql_query($sql); 
if ($result === FALSE) { 
    die(mysql_error()); 
} 

이 있어야합니다 그리고 당신은 또한 당신의 fetch_row 루프 보이지 않는 구문 오류를 가지고 : 당신이 원하는 무엇

$title = $row[title]; 

입니다
$title = $row['title'] 

당신은 fetc을 시도하고 있습니다. h 존재하지 않는 상수 "title"을 사용하는 배열 색인. 이 값은 $row에서 검색하려는 다른 모든 값에도 적용됩니다.

관련 문제