Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

平凡 發問時間: 電腦與網際網路程式設計 · 1 0 年前

想請問php裡while的問題

下面這是我從書裡截取出來的一段PHP程式碼

只要加上連線mysql跟改好路徑圖片路徑,顯示是沒問題

$sProduct="\n \n";

$fileList="";

$checkBoxList="";

$cnt=0;

while ($line=mysql_fetch_array($result,MYSQL_ASSOC))

{

$sFlowerName=iconv("UTF-8","BIG5",$line["name"]);

//$sFlowerName=$line["name"];

$sKey=sprintf("%s,%s,%s",$line["fno"],$line["price"],$sFlowerName);

$fileList.=sprintf(" \n",$line["image"]);

$checkBoxList.=sprintf(" %s\n",$sKey,$sFlowerName);

if (($cnt % 4) == 3)

{

$sProduct.=$fileList;

$sProduct.=" \n \n \n";

$sProduct.=$checkBoxList;

$sProduct.=" \n\n \n \n";

$fileList="";

$checkBoxList="";

}

$cnt++;

}

小弟是初學者,上面程式內容有個地方我搞不懂,煩請大大能詳細解釋

就是這句 while ($line=mysql_fetch_array($result,MYSQL_ASSOC))

mysql_fetch_array傳回的檔案應該是陣列(沒有判定大於小於或等於,為什麼加在while()裡面不會變無限迴圈??

看下面的程式(包括if裡的也都沒break或其它中止的程式)

另外,上面那段程式是否也會更改$result裡的內容??

因為我在下面另外送查詢

$line1=mysql_fetch_row($result);

echo $line1[0]; //未顯示內容

但把另外送查詢的程式放到while之前,就有顯示了

可以詳細解釋一下這兩個原因嗎??

1 個解答

評分
  • Sam
    Lv 6
    1 0 年前
    最佳解答

    因為$line=mysql_fetch_array($result,MYSQL_ASSOC)是「賦值」的行為。

    也就是將右傳給左值。

    當右值有傳東西給左值時,判斷上就是true的情況。則迴圈內容會執行。

    反過來說如果沒東西時,判斷上就是取得flase。

    則是回圈就中止了。

    附帶一提:

    mysql_fetch_array($result,MYSQL_ASSOC)其實改成

    mysql_fetch_assoc($result)就行了。

    2011-03-05 17:35:58 補充:

    另外你在下面寫的話!

    $result的資料紀錄早就被mysql_fetch_array()紀錄成最後一筆偏移量之後。

    也就是沒有任何的紀錄了。

    通常標準做法中是不會把同一個資料結果做二次使用。

還有問題?馬上發問,尋求解答。