真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php數(shù)據(jù)太大無法返回 php數(shù)據(jù)太大無法返回怎么解決

php數(shù)據(jù)多影響返回速度嗎

框架用的是ci,數(shù)據(jù)庫是sqlsrv(sql server 2008),sql查詢返回的結(jié)果集有2萬條數(shù)據(jù),我在ci框架里面執(zhí)行這個sql語句,網(wǎng)頁一直在轉(zhuǎn)圈,2萬條數(shù)據(jù)要轉(zhuǎn)30秒左右,但是我的sql語句在sql server 2008 R2 里面執(zhí)行 是秒查,在ci里面用自帶查詢sql執(zhí)行時間是200毫秒,,說明我的語句并不慢。個人覺得應(yīng)該是返回數(shù)據(jù)太多導(dǎo)致慢的,返回的是2萬條數(shù)據(jù),20個字段左右,,因為我做的是統(tǒng)計 ,要把數(shù)據(jù)導(dǎo)出成csv文件,所以數(shù)據(jù)比較多,這個該怎么處理?

成都創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、宜賓網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5技術(shù)、商城開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為宜賓等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

我的sql 語句是select * from table where create_time between 'xxxx-xx-xx 00:00:00' and 'xxxx-xx-xx 23:59:59'; 是根據(jù)時間段來的 如果用戶選擇的時間范圍小 那數(shù)據(jù)就少 如果范圍大 那數(shù)據(jù)就大 數(shù)據(jù)大的時候就很慢

public function aa(){

$sql ="select * from table where create_time between 'xxxx-xx-xx 00:00:00' and 'xxxx-xx-xx 23:59:59'";

$result=$this-db-query($sql)-result_array();

}

這已經(jīng)是最簡單的查詢了,sql語句秒查,但是用瀏覽器執(zhí)行就很慢,

我在瀏覽器里面執(zhí)行 , 如果查詢結(jié)果幾萬條的話 瀏覽器就一直轉(zhuǎn)圈,要等四十多秒,500條足有數(shù)據(jù)是3、4秒

我在想是不是result_array()這一步 需要循環(huán)需要花費太多的時間,本身記錄就有幾萬條,然后還有二十個字段

==============2017-05-16 16:01更新===============

我沒有用ci框架自帶的result_array() ,查看ci框架文檔的時候看到一段話:

經(jīng)常的,你會需要提供一個數(shù)據(jù)庫的 connection ID 或是一個 result ID, connection ID 可以這樣來

$this-db-conn_id;

result ID 可以從查詢返回的結(jié)果對象獲取,像這樣:

$query = $this-db-query("SOME QUERY");

$query-result_id;

于是我修改了我的代碼 拿 result_id 去循環(huán)讀取每條記錄

$sql ="select xxx";

$query=$this-db-query($sql);

//這里因為我用的是sqlsrv 所以使用的是sqlsrv_fetch_array 來循環(huán)讀取每一行

//然后每讀一行 就寫如csv文件

while($row=sqlsrv_fetch_array($query-result_id,SQLSRV_FETCH_ASSOC)){

//這里是把row 寫入csv文件的代碼

}

具體的代碼就是下面了

$sql="xxx";

$query=$this-db-query($sql);

$filename= "CostDetail.csv";//導(dǎo)出的文件名

header('Content-Type: application/vnd.ms-excel');

header('Content-Disposition: attachment;filename="'.$filename.'"');

header('Cache-Control: max-age=0');

// 打開PHP文件句柄,php://output 表示直接輸出到瀏覽器

$fp = fopen('php://output', 'a');

// 輸出Excel列名信息

$head = array(xxx);

foreach ($head as $i = $v) {

// CSV的Excel支持GBK編碼,一定要轉(zhuǎn)換,否則亂碼

$head[$i] = iconv('utf-8', 'gbk', $v);

}

// 將數(shù)據(jù)通過fputcsv寫到文件句柄

fputcsv($fp, $head);

// 計數(shù)器

$cnt = 0;

// 從數(shù)據(jù)庫中獲取數(shù)據(jù),為了節(jié)省內(nèi)存,不要把數(shù)據(jù)一次性讀到內(nèi)存,從句柄中一行一行讀即可

$limit = 5000;

while ($row=sqlsrv_fetch_array($query-result_id,SQLSRV_FETCH_ASSOC)){

$cnt ++;

if ($limit == $cnt) { //刷新一下輸出buffer,防止由于數(shù)據(jù)過多造成問題

ob_flush();

flush();

$cnt = 0;

}

//這里是把每個字段的編碼轉(zhuǎn)成gbk

$newRow[] = $this-_mb_convert_encoding($row['edis_orgsoid']);

....

unset($row);

fputcsv($fp, $newRow);

unset($newRow);

}

exit;

這樣能導(dǎo)出文件 但是我看了一下 19204行的,16列 的csv文件 3M左右 , 需要40-45秒的時間才能導(dǎo)出好,,我想問這時間還能優(yōu)化的再快點嗎

php能連上數(shù)據(jù)庫但是就是不能返回數(shù)據(jù),實測sql語句沒有問題,之前都能查詢成功,大神幫幫忙

你的數(shù)據(jù)庫連接是正常的話,我建議你把你的查詢語句換成單引號包括的

$sql='select count(*) where id="'.$userid.'" and pwd="'.$pwd.'"';

你出現(xiàn)這個問題很有可能是因為你的數(shù)據(jù)庫在查詢的時候獲取的查詢語句有問題

另外,count方法在查詢的時候,最好設(shè)置一個字段,不然會查詢每一個字段出來,浪費資源

php 想用echo返回比較大的數(shù)據(jù) 請問怎么用?

文件太大了,考慮使用分段處理,每次返回一小段。如果執(zhí)行時間無限長的話服務(wù)負(fù)載大,極有可能使用。


分享標(biāo)題:php數(shù)據(jù)太大無法返回 php數(shù)據(jù)太大無法返回怎么解決
當(dāng)前鏈接:http://weahome.cn/article/ddsoogc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部