0

mysql テーブル (ジョブ) から行をフェッチしています。そのフェッチの中で、別のテーブル (アカウント) からもフェッチしています [ID_ASSOC がジョブに関連付けられているかどうかに応じてアカウント API キーを受け取るため]: 以下はコードです。

$sql = "SELECT * FROM jobs";
$query = mysqli_query($db_conx, $sql);
while($row = mysqli_fetch_assoc($query)){
   echo $row['action'];
   echo "<br/>";
   $job_poster_id = $row['id_assoc'];

        $sql = "SELECT * FROM accounts WHERE id_assoc='$job_poster_id'";
        $query = mysqli_query($db_conx, $sql);
        while($rows = mysqli_fetch_assoc($query)){
        $username = $rows['twitter_username'];
            $consumer_key = $rows['consumer_key'];
            $consumer_secret = $rows['consumer_secret'];
            $access_token = $rows['access_token'];
            $access_token_secret = $rows['access_token_secret'];
        }

  echo $job_poster_id ;
  echo "<br/>";
  echo $twitter_username;
  echo "<br/>";
  echo "----------------------------------";
  echo "<br/>";
}

出力:

specific-message 
4 
admin
----------------------------------

これを行うと、1行の出力しか得られず、その理由がわかりません。上記の出力を行の数だけ繰り返したいのですが、1行しか実行していません(コードでアカウントフェッチを使用)。ただし、内部フェッチ(アカウントフェッチ)なしで実行すると、必要に応じて複数の行が返されます。どうしてこれなの?(以下は、アカウント フェッチなしのサンプル コードです):

$sql = "SELECT * FROM jobs";
$query = mysqli_query($db_conx, $sql);
while($row = mysqli_fetch_assoc($query)){
  echo $row['action'];
  echo "<br/>";
  $job_poster_id = $row['id_assoc'];

  echo $job_poster_id ;
  echo "<br/>";
  echo "----------------------------------";
  echo "<br/>";
} 

出力:

specific-message
4
----------------------------------
specific-message
1
----------------------------------
specific-message
2
----------------------------------
4

1 に答える 1

1
$query = mysqli_query($db_conx, $sql);
while($row = mysqli_fetch_assoc($query)){
    echo $row['action'];
    echo "<br/>";
    $job_poster_id = $row['id_assoc'];

    $sql = "SELECT * FROM accounts WHERE id_assoc='$job_poster_id'";
    $query = mysqli_query($db_conx, $sql);

問題は$query、内側と外側のクエリに使用していることです。

内部クエリが実行され、ループをステップ実行すると、結果セットの最後まで反復されます。外側のwhileループが実行されると、mysqli_fetch_assoc($query)falseが返されます。これは、すでに結果セットの最後にいるためです-期待していた結果セットではありません。

$queryこれは、いずれかの変数の名前を変更することで修正できます。

于 2013-08-26T19:59:08.877 に答える