2010-12-20 9 views
0

私のsqlスクリプトはPHPで使用するときに値 '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

ありがとうございます!私は記事を読むだろう - 私はまだ本当に新しいですので、私はまだ学んでいます。私はあなたの助けに感謝します! – user457666

+0

@userようこそ。将来をサポートする:エラー報告を有効にする!すべてのエラーを見るには 'error_reporting(-1)'に設定してください。表示されるエラーについては、[マニュアル](http://www.php.net/manual/en/)を参照してください。それはあなたをたくさん助けます! – deceze

0

クエリ($ uid、$ user、$ date)で値をエスケープしておらず、クエリの構文を破っているSQLメタキャラクタ(おそらく引用符')が1つ以上含まれています。

また、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から取得しようとしている他のすべての値にも適用されます。

関連する問題