2012-02-01 74 views
0

這是我的PHP代碼,我知道SQL查詢的工作原理,我測試了這個命令,在數據庫的數據文件夾中找到新的CSV文件。但是,當我使用MySQL在PHP中運行查詢時,沒有任何文件出現在任何地方。可以請別人指出我的方向是正確的,還是告訴我我的代碼在哪裏有缺陷?沒有錯誤,也沒有文件導出。 PHP MySQL到CSV

<?php 
    $host="localhost"; 
    $user="xxxx"; 
    $password="xxxx"; 
    $dbname="fbclients"; 

    $con = new mysqli($host, $user, $password, $dbname) 
    or die ('Could not connect to the database server' . mysqli_connect_error()); 

    $query = "SELECT * INTO OUTFILE \"contacts10.csv\" FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' FROM contacts"; 
    if ($stmt = $con->prepare($query)) { 
    $stmt->execute(); 
    $stmt->bind_result($field1, $field2, $field3); 
    while ($stmt->fetch()) { 
     //printf("%s, %s\n", $field1, $field2, $field3); 
    } 
    $stmt->close(); 
    } 
    //$con->close(); 
?> 

回答

1

退出引號。

它應該是INTO OUTFILE \"contacts10.csv\"。請注意反斜槓,或使用單引號。

我不知道這將如何運行沒有錯誤。這不是Perl,在這裏 - 你不能僅僅假設字符串外的contacts10.csv意味着什麼。

+0

對不起,我忘了把它們放回到我發佈之前。它也不適用於反斜槓,我想嘗試一下,看看它是否會給我一個錯誤。依然沒有。這是我的第一個腳本導出到一個文件,通常我剛剛插入並在myphpadmin中完成轉儲,但我想讓客戶端訪問下載他們的聯繫人。我對發佈中的錯誤表示歉意。 – WereGoingLive 2012-02-01 05:14:13

+0

@WereGoingLive修復後,該文件將進入PHP進程的當前工作目錄。嘗試給出一個絕對路徑,如「/tmp/contacts10.csv」。 – Borealid 2012-02-01 05:15:06

+0

@ Borealid,感謝您的快速回復,我現在得到這個**「警告:mysqli_stmt :: bind_result()[mysqli-stmt.bind-result]:綁定變量的數量與準備好的字段數量不匹配在第15行的[PATH]中的陳述「** – WereGoingLive 2012-02-01 05:38:39

0

另一種方法是:

存儲查詢輸出到陣列。並將陣列轉換爲CSV。它會工作得很好。我會建議下面的代碼給你。

$host="localhost"; 
    $user="xxxx"; 
    $password="xxxx"; 
    $dbname="fbclients"; 

    $con = new mysqli($host, $user, $password, $dbname) 
    or die ('Could not connect to the database server' . mysqli_connect_error()); 


    $query = "SELECT * FROM contacts"; 
    if ($stmt = $con->prepare($query)) { 
header('Content-Type: text/csv; charset=UTF-8'); 
    header('Content-Disposition: attachment; filename=sample.csv'); 
    header('Pragma: no-cache'); 
    header('Expires: 0'); 
    $fp = fopen('php://output', 'w'); 
    $stmt->execute(); 
    $stmt->bind_result($field1, $field2, $field3); 
    while ($stmt->fetch()) { 
    fputcsv($fp, $field1); 
    fputcsv($fp, $field2); 
    fputcsv($fp, $field3); 
    } 
    $stmt->close(); 
    } 

    fclose($fp); 
    exit(); 
相關問題