當前位置:首頁 » 編程語言 » phpmysql遍歷

phpmysql遍歷

發布時間: 2024-12-09 19:09:46

『壹』 php讀取MYsql資料庫讀取出來的數據怎麼控制一行顯示一條數據

使用mysql函數,mysql_fetch_row();這樣就能逐行讀取

『貳』 PHP + Mysql多個表並行查詢如何實現

在PHP-FPM處理HTTP請求時,有時會遇到一個請求需要進行多次MySQL查詢(在報表類應用中比較常見)。通常我們會以串列方式查詢:

$link=newmysqli();
$rs1=$link->query('SELECT*FROMtable1');
while($row=$rs1->fetch_row()){...}
$rs2=$link->query('SELECT*FROMtable2');
while($row=$rs2->fetch_row()){...}
$rs3=$link->query('SELECT*FROMtable3');
while($row=$rs3->fetch_row()){...}

串列查詢方式有個缺點:在MySQL返回數據之前,PHP一直是處於空等的狀態,不會繼續往後執行。如果數據量大或者查詢復雜,MySQL響應可能會比較慢,那麼以串列方式查詢會有一些延遲。給用戶最直接的感受就是 Loading… 的圈圈一直打轉。

那麼有什麼辦法可以減少查詢MySQL的時間?用多進程並行查詢不行,因為PHP-FPM 中不允許用 pcntl_fork 一類的調用。

幸好還有 mysqlnd,mysqlnd提供了類似 stream_select 的機制(見 這篇文章) ,可以做到在單進程中對MySQL並行查詢。這主要運用了mysqli_poll 和 reap_async_query 兩個函數。

還是通過例子來介紹MySQL並行查詢的實施方法。假設要並行地向MySQL發出10個查詢,最基本的代碼應該是這樣的:

1.$links=[];
2.for($i=0;$i!==10;$i++){
3.$links[$i]=newmysqli('127.0.0.1','user','password','db1');
4.$links[$i]->query('SELECTSLEEP(1)',MYSQLI_ASYNC);
5.}
6.$allResult=[];
7.while(!empty($links)){
8.$reads=$links;
9.$errors=$reject=[];
10.if(!mysqli_poll($reads,$errors,$reject,null)){
11.continue;
12.}
13.foreach($readsas$read){
14.$idx=array_search($read,$links,true);
15.$allResult[$idx]=[];
16.$result=$read->reap_async_query();
17.while($row=$result->fetch_row()){
18.$allResult[$idx][]=$row;
19.}
20.$read->close();
21.unset($links[$idx]);
22.}
23.}

解釋下這段代碼的含義:

2~5行,同時發起10個MySQL連接,並發出查詢

注意query() 的第二個參數帶上了 MYSQLI_ASYNC 表示非阻塞查詢

10行,使用mysqli_poll 輪詢10個連接的查詢有無返回

mysqli_poll 的第一個參數$reads是個數組,包含需要輪詢那些連接。mysqli_poll 執行完後,會改寫$reads,改寫後$reads包含的是那些已經有數據返回連接。

mysqli_poll的第四個參數,控制的是輪詢的等待時間,單位是「秒」。如果像本例當中設置為null,那麼mysqli_poll輪詢是阻塞的:只有監聽的連接中,任意一個連接有數據返回了,mysqli_poll才會返回。如果等待時間設置為0,那麼每次執行mysqli_poll會立即返回,外層的while會頻繁循環。

第11~19行,遍歷已經有數據返回的連接

reap_async_query和普通query一樣,返回的是mysqli_result,可以一行行fetch數據

20~21行,對於已經獲得了數據的連接,下次mysqli_poll就不需要再輪詢這個連接了,所以關閉連接,並從$links數組刪除這個連接

當所有的連接都返回了數據,$links數組空了,while循環也就終止了。

使用並行查詢的方式,可以大大縮短處理HTTP請求的時間,假設本例中的10個SQL查詢,每個需要執行1秒。因為是並行,處理所有的查詢,也只需要1秒左右。

『叄』 php 怎麼讀取mysql一條數據並輸出某一欄位

可以參考下面的代碼:

//連接資料庫伺服器

$link =mysql_connect(『host(伺服器ip地址,本地用localhost)』,'資料庫賬戶',『資料庫密碼』);

//選擇要連接的資料庫

mysql_select_db('資料庫名字');

//執行查詢,返回數據源

$query = mysql_query("SELECT * FROM test");

//遍歷數據源,並賦值給$r,當沒有數據時,變成false中斷循環

while($r = mysql_fetch_array($query)){

echo $r['field_name'];//輸出欄位

}

(3)phpmysql遍歷擴展閱讀:

mysql使用說明

1、如果是用 MySQL +Apache,使用的又是FreeBSD網路操作系統的話,安裝時候應按注意到FreeBSD的版本問題,在 FreeBSD 的 3.0 以下版本來說,MySQL Source 內含的 MIT-pthread 運行是正常的,但在這版本以上,必須使用 native threads,也就是加入一個 with-named-thread-libs=-lc_r 的選項。

2、如果在 COMPILE 過程中出了問題,請先檢查gcc版本是否在 2.81 版本以上,gmake 版本是否在3.75以上。

3、如果不是版本的問題,那可能是內存不足,請使用 ./configure--with-low-memory 來加入。

4、如果要重新做configure,那麼可以鍵入rmconfig.cache 和 make clean 來清除記錄。

5、把 MySQL 安裝在 /usr/local 目錄下,這是預設值,也可以按照需要設定所安裝的目錄。

『肆』 php mysql_fetch_assoc 循環遍歷表格

有2個辦法,第一種直接使用sql的多表聯查,效率高,但是得到的數據table1會被擴展成table2一樣的條目數 要再次處理

select*fromtable1a,table2bwherea.orderid=b.orderid

第二種方法,先得到table11的數據,在循環中匹配table2到一個新的列名中

$conn=mysqli_connect("127.0.0.1","root","123","test");
$sql="select*fromtable1";
$rs=mysqli_query($conn,$sql);
$Arr=array();
while($row=mysqli_fetch_assoc($rs)){
$sql="select*fromtable2whereorderid=".$row["orderid"];
$row["order_sku"]=mysqli_fetch_all(mysqli_query($conn,$sql),MYSQLI_ASSOC);
$Arr[]=$row;
}
print_r($Arr)

如果你是剛開始學php 建議直接拋棄mysql用mysqli 因為PHP5.5已經廢棄mysql方法了

熱點內容
電商高管如何配置 發布:2024-12-26 21:13:48 瀏覽:705
批發的演算法 發布:2024-12-26 21:13:46 瀏覽:204
安卓手機在日本下載哪個導航 發布:2024-12-26 21:09:32 瀏覽:556
白雜訊加密 發布:2024-12-26 20:31:02 瀏覽:638
怎麼防止電腦刪除腳本 發布:2024-12-26 20:19:19 瀏覽:150
輸入伺服器或許可證文件怎麼輸 發布:2024-12-26 20:10:40 瀏覽:160
pythonarcgis 發布:2024-12-26 20:09:48 瀏覽:699
python初始化變數 發布:2024-12-26 20:05:27 瀏覽:179
win10清理緩存文件 發布:2024-12-26 20:04:50 瀏覽:361
登微信手機號填了密碼是什麼意思 發布:2024-12-26 19:40:16 瀏覽:249