2012-02-09 13 views
0

グループの一部であるユーザーのテーブルを作成しようとしていますが、動作させることができません。リストは列に格納され、各ユーザーIDは「〜」で区切られます。たとえば、ユーザー1,2および3が出席している場合、列には「1〜2〜3」が表示されます。これは私が爆発するものです。phpとmysqlクエリーの問題 - クエリが機能しない

私は次のエラー取得しています:$友人が定義されているラインのためである「警告は、mysql_fetch_array()は、パラメータ1は、リソースに指定したbooleanことを期待」。

$attendingUsers = mysql_query("Select acceptedInvites from events where eventID = ".$_GET['eventID']." "); 
    while($friend = mysql_fetch_array($attendingUsers)){ 
       $users = $friend['acceptedInvites']; 
       $userExplode = explode("~",$users); 
      for($i=0; $i<count($userExplode);$i++){ 
       echo $userExplode[$i]; //displays the userid number properly so I know this is working 
       $friendInfo = mysql_query("select (userid,username) from users where userid = '". $userExplode[$i]."' ");; 
       $friend = mysql_fetch_array($friendInfo); 
       echo '<table><tr><td><a href="profile.php?userid=' . $friend['userid'] . '">' . $friend['username'] . '</a></td>'; 
       } 
      } 

私はそれをエコーするとき何も(通常の配列を言う)が表示されていないので、それは$ friendInfoとは何かだと思うし始めています。

+0

ニースのSQL注入穴。誰かがそれをドライブして、あなたのサーバーの真ん中に駐車するトラックが好きだと思っています。 –

答えて

5

ここにはいくつか問題があります。発生している主な問題は、エラー処理とクエリの構文エラーがないことです。選択リストの列の前後に括弧があってはならない:

$friendInfo = mysql_query("select userid, username from users where userid = '". $userExplode[$i]."' "); 
//-------------------------------^^^^^^^^^^^^^^^^^^ 

いくつかの基本的なエラー処理は、これらのエラーを表面化する:

$friendInfo = mysql_query("select userid, username from users where userid = '". $userExplode[$i]."' "); 
if (!$friendInfo) { 
    // error! 
    echo mysql_error(); 
} 
else { 
    $friend = mysql_fetch_array(....); 
} 

あなたはSQLインジェクションに対する入力パラメータを逃れるのではなく、直接それらを使用する必要があります。クエリ。それはmysql_real_escape_string()で最も簡単に実行できます。

$attendingUsers = mysql_query("Select acceptedInvites from events where eventID = ". mysql_real_escape_string($_GET['eventID'])." "); 

あなたはIN()句を使用するクエリでforループを置き換えることで、このアルゴリズムを少し向上させることができます。代わりに、すべての友達をループで、カンマで区切られたリストに、配列を破ずつのクエリを実行します。

$userExplode = explode("~", $users); 
// Implode them together with commas 
// Don't forget to call mysql_real_escape_string() on these if necessary 
$friendlist = implode(",", $userExplode); 
// Actually, you could just do $friendlist = str_replace("~", ",", $users) 
// and avoid doing either explode() or implode()... 

// Then query with an IN() clause... 
$friendInfo = mysql_query("select userid, username from users where userid IN ($friendlist)"); 

ではなく、ループ内でクエリを実行し、あなただけのループでフェッチする必要があります。これは、何度も繰り返し照会するよりはるかに効率的です。

+0

うわー、そんなに簡単な間違い。私はそれを気付かなかったとは信じられません。その日は休みを取る時だと思います。助けてくれてありがとう! – user1104854