3

だから、私は PHP を使用して最初の超基本的な CMS を構築しています。見ているチュートリアルからコードを単純にコピーしたくはありませんが、本当に理解しています。気になる点の 1 つは、投稿を取得するために while ループを使用することです。以下のコードでは、丸括弧内のステートメントがどのように条件を構成しているかわかりません。私には、配列を変数 $post に割り当てるだけのように思えます。条件ではないものをどのようにループできるかが私の質問だと思います。ありがとう!

function get_posts () {
   $query = mysql_query("SELECT * FROM posts") or die(mysql_error());

   while ($post = mysql_fetch_assoc($query)) {
      echo $post['Content'];
   }
}
4

5 に答える 5

7

止まる!

あなたが見ているチュートリアルは非常に古くなっています! 新しいコードで関数を使用しないでくださいmysql_*。それらはもはや維持されておらず、非推奨プロセスが開始されています。赤いボックスが見えますか? 代わりにプリペアド ステートメントについて学び、 PDOまたはMySQLiを使用してください。この記事は、どちらを決定するのに役立ちます。PDO を選択する場合は、ここに良いチュートリアルがあります。


具体的な質問については、この行

while ($post = mysql_fetch_assoc($query)) {

条件です。mysql_fetch_assoc()さらに結果がある場合は配列を返し、false何もない場合は を返します。が返された場合false、条件は に評価されfalse、ループは中断されます。

于 2012-11-16T17:43:56.883 に答える
1

基本的に、新しい行をフェッチし、$post変数に割り当てます:

while ($post = mysql_fetch_assoc($query))

mysql_fetch_assoc :

戻り値

フェッチされた行に対応する文字列の連想配列を返すか、それ以上行がない場合はFALSEを返します。

そのため、変数に割り当てられてから評価されると、ループが停止しますmysql_fetch_assocfalse$postwhile

于 2012-11-16T17:44:57.110 に答える
1

mysql_fetch_assocのマニュアルページで説明されているように:

戻り値: フェッチされた行に対応する文字列の連想配列を返すか、それ以上行がない場合は FALSE を返します。

于 2012-11-16T17:45:06.847 に答える
0
while ($post = mysql_fetch_assoc($query))

最初の $post が値を取得することを意味します。エラーがある場合、mysql_fetch_assoc は false を返します。

while ループは、$post が false でないことを確認します。これは、true、整数、配列などである可能性があります。

于 2012-11-16T17:45:17.610 に答える
0

これは PHP の一部です。割り当ての結果は、割り当てられる値です。これにより、次のことが可能になります。

$x = $y = $z = 7;

7これは、3 つの変数すべてに割り当てられます。そのように、与えられた

while($row = mysql_result(...)) {

mysql_result は、フェッチするデータがなくなった場合、行データの配列またはブール値の false を返します。その配列/ブール値は $row に割り当てられます。そして、この割り当てには while() がラップされているため、配列/ブール値は while() まで伝播します。

データの行が返された場合、それは while によってブール値 true として扱われる配列であり、ループが続行されます。これ以上データがない場合、mysql_fetch はブール値の false を返し、これが $row に割り当てられます。その false も割り当ての結果であり、while() が FALSE を取得し、ループが終了します。

于 2012-11-16T17:49:48.017 に答える