2016-02-05 164 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我想确认表中包含:,。 ; - /: –