台灣最大程式設計社群網站
線上人數
936
 
會員總數:246202
討論主題:189774
歡迎您免費加入會員
討論區列表 >> PHP >> 發生一個很奇怪的問題,mysqli_fetch_array廻圈內不執行
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
發生一個很奇怪的問題,mysqli_fetch_array廻圈內不執行
價值 : 10 QP  點閱數:2592 回應數:16
樓主

端茶小弟
門外漢
0 11
222 40
發送站內信

先說明一下情形

我在Msg_Setting.php的語法


在DB_Operate.php寫了二個Function,一個叫「Read_Method($strSQL)」沒有問題,如下程式碼,然後我想說沒問題,然後再拷貝一個,取名叫「Read_MSG_LOG($sql3)」然後改了sql3語法,照原本方式再run一次,靠。不行
while($result=mysqli_fetch_array($strSQL)),不執行,為了捉錯,所以我把裡面的語法通通拿掉,放上echo "test";,這樣總行吧!連簡單的echo "test";都不執行,然後再把sql3的語法,改為跟sql語法2一樣$sql2 ="select * from db_tw_acc";竟然動了…所以測試結果,有些資料表可以,有些不可以,有人能解釋這怪現像?
我也用
//取得查詢結果集
$AuthResult=mysqli_fetch_array($strSQL);
的語法來查詢,也有資料!






搜尋相關Tags的文章: [ mysqli_fetch_array不執行 ] ,
本篇文章發表於2012-01-12 13:24
1樓
作者回應

端茶小弟
檢舉此回應
在網路上查,說有一種叫做指標歸位…第一次聽,因為我剛入門PHP,以前寫asp的
加上「mysql_data_seek($strSQL,0);」無效!

廣告一下!有人想接案,請聯絡我,發到我信箱!!
本篇文章回覆於2012-01-12 13:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
去查看一下 mysqli_fetch_array函數內的參數。

它需要的是一個資料集的物件,而不是字串。
你給他一個SQL字串。它當然不認識就直接回傳偽值。也就會變成不運行了。
本篇文章回覆於2012-01-12 14:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
補上該函數的說明連結給你

http://php.net/manual/en/function.mysql-fetch-array.php

請好好的學習基本吧,怎麼會給字串啊。

你在Read_Method上就有用成資料集了。怎麼在這奡N不會用了??

PS:
建議你參數命名注意一下。參數的命名是有學問的。不要以為人家的參數命名是隨便用用的。

一般有包含STR的命名,都是代表該參數是字串類型。

你看你第二支程式堬17行 $strSQL=mysqli_query($Db_Link,$strSQL);
其實在這堛$strSQL就已經是變成資料集的物件類型了。正常來說這邊的命名就該要改了。免的後面程式碼一多之後搞不清楚這個是什麼。
(我猜測你可能還是以為它是一個字串)

本篇文章回覆於2012-01-12 14:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
附帶一提:

請不要隨意做廣告。你之前兩篇廣告文可是都被移除掉的。(是有人反應後我移除的)
真想找人合作你可以去外包相關區去找。可能還比較容易找的到。要不然就像你給我私訊(但不要引起人家的反感)也行的。
本篇文章回覆於2012-01-12 14:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

端茶小弟
檢舉此回應
好的,謝謝,我看一下!
本篇文章回覆於2012-01-12 15:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

端茶小弟
檢舉此回應
你沒看懂我的問題唷,我下面的程式碼是省略的,因為跟上面是一模一樣

您可能誤解我的意思了
Read_Method跟Read_MSG_LOG裡面的程式碼是一模一樣,只是我省略而已

唯一有更動的地方是sql語法2跟sql語法3,就這樣!就不能run..所以我的問題還是沒解!
本篇文章回覆於2012-01-12 15:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

端茶小弟
檢舉此回應
我的觀念很清楚的,我給的是結果集,所以你會覺的奇怪,為什麼我上面寫對,下面就不對,當然不會,因為下面那段程式碼是用複製的,你沒仔細看我的說明
本篇文章回覆於2012-01-12 15:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

端茶小弟
檢舉此回應
所以我的問題簡單說,第一個function可以執行我要的功能,第二function是一模一樣!我只更動了sql的語法,就run不起來~
本篇文章回覆於2012-01-12 15:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

端茶小弟
檢舉此回應
所以我的問題簡單說,第一個function可以執行我要的功能,第二function是一模一樣!我只更動了sql的語法,就run不起來~
本篇文章回覆於2012-01-12 15:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

端茶小弟
檢舉此回應
而且我用mysqli_num_rows去查資料,也有查到資料筆數是正確的,但就無法去執行mysqli_fetch_array的迴圈
本篇文章回覆於2012-01-12 15:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
最有價值解答

Solty
檢舉此回應
這聽起來很怪...mysqli_num_rows()>0的話,應該是會動作的
這只慢慢查囉
你先把while註解掉,while之前加上
var_dump($strSQL);//如果這裡false,表示query有問題
$result=mysqli_fetch_array($strSQL);
var_dump($result);//如果這裡是false,迴圈不動很正常
本篇文章回覆於2012-01-12 16:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

端茶小弟
檢舉此回應
我下了
var_dump($strSQL);
var_dump($result);

string(26) "select * from db_limitinfo"


object(mysqli_result)#3 (5) { ["current_field"]=> int(0) ["field_count"]=> int(24) ["lengths"]=> NULL ["num_rows"]=> int(1) ["type"]=> int(0) }

以後就可以正常執行了,很怪,還是找不出原因,但可以run了
本篇文章回覆於2012-01-12 16:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
題外話
第一段程式的第30行
mysqli_close($strSQL);
關閉資料庫傳入的應該是資料庫連線的資料吧

session_start(); 這東西應該要確保他只會執行一次
執行兩次在嚴格一點的環境下 php 會送出提示訊息。
本篇文章回覆於2012-01-12 22:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

端茶小弟
檢舉此回應
嗯,的確我的一些命名,沒有看仔細,會混咬,沒有仔細注意,現在發現了,感恩,感謝大家

$strSQL是字串沒錯,但我跟查詢結果集名稱一樣…就會亂
本篇文章回覆於2012-01-13 09:54
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
當您運行 $strSQL=mysqli_query($Db_Link,$strSQL);
它就已經不是字串了。

我上面說的就是,你的命名要很小心注意,免得去誤用了。

你可以在那邊改成
$result = mysqli_query($Db_Link,$strSQL);

這樣就可以確認$result是一個資料集物件。$strSQL還是維持一個字串

另外mysqli_close給的參數是連結值也就是你的$Db_Link值。
並非是字串也並非是資料集。

一般來講,你不給值的話,也會將目前所使用的資料連結給關閉。
如果有開多重資料庫的話,才需要給值指定要關哪一個。如果只是連結一個。不給值也沒關係。

至於你說第二個函數跟你第一個一樣,我的確沒看清楚。這點我比較抱歉。

那我針對你第一個一些東西再說出其奇怪的地方。
1.第9行的 global $Db_Link;
我搞不清楚你為何還要宣告成GLOBAL,因為你在這函數中就已經關掉了連線。也有額外去宣告$Db_Link。正常來說根本不需要去做GLOBAL的宣告,反正都只在這個函數用。

2.第30行的關閕連線指定值錯誤。上面說明完了,所以就不另說明。

再來回到你的問題,正常來說,你在echo 'test';確定沒有動作。就得先確定幾件事。

1.確定其SQL命令是否正常。
2.確定該SQL命令是可以撈到值的。
3.注意參數的名稱是否被蓋到。(這是針對你做了GLOBAL還有同參數應用)
本篇文章回覆於2012-01-13 12:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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