台灣最大程式設計社群網站
線上人數
1080
 
會員總數:246086
討論主題:189684
歡迎您免費加入會員
討論區列表 >> PHP >> 請問 $result=mysql_query($query); 的動作問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
請問 $result=mysql_query($query); 的動作問題
價值 : 30 QP  點閱數:1462 回應數:4
樓主

Thank you all.....
初學者
45 120
1254 158
發送站內信

程式片段如下:

$query = "SELECT * FROM XXXXX WHERE abcindex='12345';";

// 第一段
$result=mysql_query($query);
$rowArray = mysql_fetch_row($result);
echo "0 ", $rowArray[0], "<BR>";
echo "1 ", $rowArray[1], "<BR>";

// 第二段
$result=mysql_query($query); (這一段刪掉時,為問題所在)
$rowArray = mysql_fetch_row($result);
echo "0 ", $rowArray[0], "<BR>";
echo "1 ", $rowArray[1], "<BR>";

如果刪掉第二段的$result=mysql_query($query);,則$rowArray[0], $rowArray[1] 裡面沒有值!!??

請問,為什麼第二段再用$rowArray = mysql_fetch_row($result);後,$rowArray[0], $rowArray[1] 裡面沒有值!?難道第一段取值後,第二段再取值一次郤沒有值!!??(非得有 $result=mysql_query($query);後,$rowArray = mysql_fetch_row($result);才能再取值??)

(如果這不是常數的話,為什麼PHP程式要這樣設計!??這樣有什麼意義!!??謝謝!!)

本篇文章發表於2012-12-01 23:14
1樓
回應

andyto202
檢舉此回應
php 取資料庫的資料是一筆一筆取的
當你第一段取完後
當然如果第二段不要再下 query 一次
會沒有值
這很正常吧
本篇文章回覆於2012-12-02 00:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

香帥
檢舉此回應
因為您第2段
$rowArray = mysql_fetch_row($result);
已被第1段取走$result資料
$rowArray 這已無資料
因此$rowArray[0], $rowArray[1] 裡面沒有值
本篇文章回覆於2012-12-02 01:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
香帥好像有點不太對。我重新說明一下其MYSQL在PHP中的應對函數原理好了。

你要先了解一下。mysql_query這個函數並非是取資料。而是做所謂的取得資料集控制。
而mysql_fetch_row則是取得當時的記錄數資料成陣列,取完後會換下一筆。

以上的函數運做就先了解一下。再來就拿你的程式來了解

$result=mysql_query($query);//取得資料集控制權
$rowArray = mysql_fetch_row($result);//取得目前記錄筆數的資料成陣列後換下一筆(正常是在第一筆)
(略過顯示的部份)

//$result=mysql_query($query); //這就是你說的有問題,我暫時先依你的問題注解掉。
$rowArray = mysql_fetch_row($result);//取得目前記錄筆數的資料成陣列後換下一筆(如果上面的被註解掉,正常來說這媟|取第二筆的資料,除非上面沒註解變成重新取得資料集物件)
(略過顯示的部份)

由你的SQL碼來判斷,很有可能只有一筆資料。所以如果你再接續下一個mysql_fetch_row。它會取第二筆資料。
但因為你已經無第二筆資料了,所以自然其陣列就是空的。

但是你如果將第二個$result=mysql_query($query)保留下來。
因為它是又重置了一資資料集物件。其記錄筆數自然又會回到第一筆。自然就會取到資料。

以上說明是否有了解。正規來說不該這樣使用。如果你需要單一資料統一顯示的話。就需要再一開始就載入到一個變數內。
不該去做不同的。

而mysql_fetch_row最好是搭配WHILE等迴圈函數來使用

WHILE($row=mysql_fetch_row($result))
{
echo $row[0];
echo $row[1];
}
本篇文章回覆於2012-12-03 11:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Thank you all.....
檢舉此回應
原來如此,難怪mysql_fetch_row都搭配WHILE等迴圈函數使用。

控制完當然就放掉了,不然那就不是控制了。

謝謝。。。。
本篇文章回覆於2012-12-03 12:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.