2016-02-05 162 views
1

我一直在嘗試多個日期來查詢.csv與MySQLi中的某些值,但導出時出現問題,所有內容都導出到單個列,而我需要導出應該像SQL代碼(我有3個選定的列,我需要3個導出的列在.cvs)。 婁你可以找到兩個代碼:MySQLi將表導出爲CSV

1)該代碼創建數據的基礎上,表和插入值:

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "myDB"; 
// Create connection 
$conn = new mysqli($servername, $username, $password); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
// Create database 
$sql = "CREATE DATABASE myDB"; 
if ($conn->query($sql) === TRUE) { 
    echo "Database created successfully"; 
} else { 
    echo "Error creating database: " . $conn->error; 
} 
// Create connection pt a crea tabela 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
// sql to create table 
$sql = "CREATE TABLE MyGuests (
    id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
    firstname VARCHAR(30) NOT NULL, 
    lastname VARCHAR(30) NOT NULL, 
    email VARCHAR(50), 
    reg_date TIMESTAMP 
)"; 
if ($conn->query($sql) === TRUE) { 
    echo "Table MyGuests created successfully"; 
} else { 
    echo "Error creating table: " . $conn->error; 
} 
// Create connection pt a insera valori 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
// Insert value in db 
$sql = "INSERT INTO MyGuests (firstname, lastname, email) 
    VALUES ('John', 'Doe, Mark', '[email protected]'), 
    ('Mary', 'Moe-Johny', '[email protected]'), 
    ('Julie', 'Dooley', '[email protected]')"; 
if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
} else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
} 
$conn->close(); 
?> 

2)該代碼可用於在.csv出口:

<?php 
//header to give the order to the browser 
header('Content-Type: text/csv'); 
header('Content-Disposition: attachment;filename=export.csv'); 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "myDB"; 
// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$sql = "SELECT id, firstname, lastname FROM MyGuests"; 
$result = $conn->query($sql); 
if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>"; 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 
?> 

我使用這個版本XAMP:

Apache/2.4.18 (Win32) OpenSSL/1.0.2e PHP/7.0.1

Database client version: libmysql - mysqlnd 5.0.12-dev - 20150407 - $Id: 7e72f9690b1498a1bead7a637c33a831c0d2f655 $

PHP extension: mysqli Documentation

PHP version: 7.0.1

這個版本爲MySQL代碼創建了一些問題,這就是爲什麼我更喜歡MySQLi中的代碼。 非常感謝!

+0

你能指點一下代碼行哪裏認爲「逗號分隔值」被寫入文件? (修辭問題:一個簡單的csv行看起來像'34,John Doe',而你的代碼打印出像'id:34 - Name:John Doe
'這樣的東西,所以至少你必須告訴導入應用程序使用'-'作爲分隔符;但我懷疑結果是你想要的。你可能會對http://docs.php.net/fputcsv – VolkerK

+0

感興趣還有另一個用戶詢問如何將MySQL數據轉換成csv文件看看這裏,我確信這會讓你走上正軌:http://stackoverflow.com/questions/125113/php-code-to-convert-a-mysql-query-to-csv – Werner

+0

在表中有這個詞由女巫分隔:,。 - ;/ –

回答

2

基於新信息,我將此作爲解決方案。

<?php 

// call export function 
exportMysqlToCsv('export_csv.csv'); 


// export csv 
function exportMysqlToCsv($filename = 'export_csv.csv') 
{ 

    $conn = dbConnection(); 
// Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 
    } 
    $sql_query = "SELECT id, firstname, lastname FROM MyGuests"; 

    // Gets the data from the database 
    $result = $conn->query($sql_query); 

    $f = fopen('php://temp', 'wt'); 
    $first = true; 
    while ($row = $result->fetch_assoc()) { 
     if ($first) { 
      fputcsv($f, array_keys($row)); 
      $first = false; 
     } 
     fputcsv($f, $row); 
    } // end while 

    $conn->close(); 

    $size = ftell($f); 
    rewind($f); 

    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Length: $size"); 
    // Output to browser with appropriate mime type, you choose ;) 
    header("Content-type: text/x-csv"); 
    header("Content-type: text/csv"); 
    header("Content-type: application/csv"); 
    header("Content-Disposition: attachment; filename=$filename"); 
    fpassthru($f); 
    exit; 

} 

// db connection function 
function dbConnection(){ 
    $servername = "localhost"; 
    $username = "root"; 
    $password = ""; 
    $dbname = "myDB"; 
    // Create connection 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    return $conn; 
} 


?> 
+0

我是錯誤的:注意:試圖獲取非對象的屬性在第19行的C:\ xampp \ htdocs \ export_csv \ export_csv.php中012結果0結果s –

+0

我該如何獲得投票呢? – ArrowHead

+0

我將所有內容導出到一列中。你可以在這裏看到:http://pastie.org/10709704我想確認表中包含:,。 ; - /: –