$db = mysql_connect("localhost","root","1234");
mysql_select_db("it database",$db);// 输出Excel文件头,可把user.csv换成你要的文件名
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="user_import.csv"');
header('Cache-Control: max-age=0');// 从数据库中获取数据,为了节省内存,不要把数据一次性读到内存,从句柄中一行一行读即可
$sql ="select * from material";
//echo $sql;exit;
$stmt = $db->query($sql);// 打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');// 输出Excel列名信息
$head = array('Consignee','Email', 'Mobile','Address');
foreach ($head as $i => $v) {
// CSV的Excel支持GBK编码,一定要转换,否则乱码
$head[$i] = iconv('utf-8', 'gbk', $v);
}// 将数据通过fputcsv写到文件句柄
fputcsv($fp, $head);// 计数器
$cnt = 0;
// 每隔$limit行,刷新一下输出buffer,不要太大,也不要太小
$limit = 100000;// 逐行取出数据,不浪费内存
while ($row = $db->fetchRow($stmt)) {
$cnt ++;
if ($limit == $cnt) { //刷新一下输出buffer,防止由于数据过多造成问题
ob_flush();
flush();
$cnt = 0;
}foreach ($row as $i => $v) {
$row[$i] = iconv('utf-8', 'gbk', $v);
}
fputcsv($fp, $row);
}
这是我网上复制的一段代码,运行过后
excel里出现这段话<b>Fatal error</b>:  Call to a member function query() on a non-object in <b>D:\wwwroot\exe\b.php</b> on line <b>13</b><br />
这个是什么意思啊?请高手帮我解释下?我该怎么修改。
我只是想把数据导出到excel表里。

解决方案 »

  1.   

    $db不是对象,提示你对非对象使用了对象调用函数的方式.将$db->query改为mysql_query.$db->fetchRow改为mysql_fetch_array
      

  2.   

    改数据库连接为对象的方式吧。否者后面的代码都需要改。$db = new mysqli("","","");这种
      

  3.   

    $head = array('matname','mode', 'qty','price','staff','date','dept.');这一句里的字符串是不是只能英文啊?我改成中文就不显示了。还有sql语句改成
    select m.Mat_name,m.Mat_mode,mo.MO_qty,mis.MIS_price,s.Stf_name,mo.MO_date,s.Stf_department 
    from material m,materialinstorage mis,materialoutstock mo,staff s
    where m.Mat_id = mis.Mat_id
    and mis.MIS_id = mo.MIS_id
    and mo.Stf_id = s.Stf_id
    and left(MIS_date,6) = '201109' and  Mat_category = 0
    order by Stf_department
    显示出来的效果是
    matname mode qty price staff date dept.
     1    1    45  45      20110928 20110928
     1    1    45  45      20110926 20110926
     1    1    50  50      20110928 20110928
     1    1    50  50      20110924 20110924
     1    1    45  45      20110928 20110928
     1    1    45  45      20110926 20110926
     1    1    50  50      20110914 20110914
    数据怎么会连续显示两次的?没显示出来的估计也是中文的缘故。
      

  4.   


    当然可以用中文。你数据库什么编码?如果本身就是gbk的话,不需要后面的转码。文件也保存为gbk吧。
      

  5.   

    应该是GB2312,
    我现在吧utf-8改成了GB2312,中文显示了。
    可是数据为什么会重复两遍显示呢
      

  6.   

    while ($row = mysql_fetch_array($stmt)) {
    这个改为:while ($row = mysql_fetch_array($stmt),MYSQL_NUM) {
    试试。
      

  7.   

    直接显示错误了。
    Parse error: syntax error, unexpected ',' in D:\wwwroot\exe\b.php on line 42
      

  8.   

    我把MYSQL_NUM移到括号里就行了,
    这个是什么意思啊?
      

  9.   

    错了,放到括号里边去
    while ($row = mysql_fetch_array($stmt,MYSQL_NUM))
    哈哈,没仔细。
      

  10.   


    这是最简单的导出,当然功能有限,如果需要华丽点的。建议用PHPExcel。