2017-07-12 9 views
0

ながら、私は次のコード持って読んで行:(誰かが私のprevious questionで指摘したように)もちろんPHP/mysqliの:前ループ

<html> //This is using bootstrap, but nevermind, has nothing todo with question... 
<body> 
    <?php 
     echo "<div class=\"list-group\">".PHP_EOL; 
     $connection = mysqli_connect('...'); 
     if(mysqli_connect_errno()) { 
      die('Connection Error'); 
     } 
     $connection->set_charset("utf8"); //$bid is a var declared before 
     $getcom = $connection->query("SELECT * FROM hilde_comments WHERE Refer_ID LIKE '$bid' ORDER BY Comment_ID DESC LIMIT 10"); 
     if ($getcom->num_rows > 0) { 
      while ($row = $getcom->fetch_array(MYSQLI_ASSOC)) { 
       $getacc = $connection->query("SELECT * FROM hilde_accounts WHERE adress_id LIKE '$row["Account_adress"]'"); 
       if ($getacc->num_rows > 0) { 
        $accinf = $getacc->fetch_array(MYSQLI_ASSOC); 
        echo "<div class=\"list-group-item\">".PHP_EOL; 
        echo "<h4 class=\"list-group-item-heading\"><a href='".$accinf["link"]."' alt=\"Click here!\">".$accinf["email"]."</a></h4>".PHP_EOL; 
        echo "<p class=\"list-group-item-text\">".$row["Comment"]."</p></div>".PHP_EOL; 
       } else { 
        echo "Information ".$row["Account_UID"]." failed."; 
       } 

      } 
      $getcom->close(); 
      $getacc->close(); 
      $connection->close(); 
      echo "</div>"; 
     } else { 
      $getcom->close(); 
      $connection->close(); 
      echo("<div class=\"list-group-item list-group-item-danger\">Text not found</div>"); 
     } 
    ?> 
</body> 
</html> 

が、これは動作しません。しかし、引き続き、私の例のスニペットで見られるように、エコーのための両方のクエリの結果が必要です。どのように私は最初のクエリの結果を格納し、実際に私のwhileループでASSOCとして使用することができますか?事前にみんなで

おかげで、

VicStudio

+1

'$ row'変数の最初のクエリの結果が既にありませんか? – Sugar

+0

@ClémentMaletはい、それはありますが、最初のものがまだアクティブな(そしてまだ閉じられていない)間に2番目のクエリを開始できません。 – VicStudio

+1

実際のコードを投稿できますか?私は '$ row'を2番目のクエリで使い、最初のフェッチを上書きしていると思います。おそらく、これをすべて1つのクエリと 'join'で行うこともできます。 – chris85

答えて

1

複数のクエリを使用できない理由はありません。あるクエリの処理を完了してから別のクエリを実行する必要はありません。

$getcom = $connection->query("..."); 
while ($row = $getcom->fetch_array(MYSQLI_ASSOC)) { 
    $getacc = $connection->query("..."); 
    while ($row2 = $getacc->fetch_array(MYSQLI_ASSOC)) { 
     echo $row2["Name"]." and ".$row["Adress"]; 
    } 
} 

編集今、実際のコードが追加されたことを、私はこの問題は、ここにあることがわかります。

$getacc = $connection->query("SELECT * FROM hilde_accounts WHERE adress_id LIKE '$row["Account_adress"]'"); 

あなたが引用符を混合しています。そのクエリ(またはPHPの構文エラー)でmysqliエラーが発生している可能性があります。あなたは本当には、このためのパラメータ化クエリを使用しますが、あなたは、変数をこのように使用するを持っている場合は、あなたの文字列を中断する必要があります限りのアドレスには'がないとして、動作します

$getacc = $connection->query("SELECT * FROM hilde_accounts WHERE adress_id LIKE '" . $row["Account_adress"] . "'"); 

を。この種のコードは、SQLインジェクション攻撃が発生するのを待っていることを覚えておいてください。パラメータ化されたクエリを使用してください。

+0

パラメータ化されたクエリとは何ですか? – VicStudio

+0

[PDOのドキュメント]ページ(https://stackoverflow.com/documentation/php/5828/pdo/2685/preventing-sql-injection-with-parameterized-queries#t=201707121732587176923)と[for mysqli]( https://stackoverflow.com/documentation/php/2784/php-mysqli/11958/prepared-statements-in-mysqli#t=20170712173313227615)。 – rickdenhaan

+0

ありがとう!私の問題だけでなく、私のウェブページのセキュリティシステムでも、あなたは多くの助けになりました! :) – VicStudio

関連する問題