将CSV文件直接导入MySQL数据库

时间:2012-07-12 21:55:44

标签: php mysql csv

  

可能重复:
  Import CSV to mysql

我需要一些帮助:

我正在尝试使用php将.csv文件导入mysql数据库,而不是通过phpmyadmin手动执行。

这是我目前的代码:

if($_REQUEST['func'] == "iid"){
    $db->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or 
                      die('There was a problem connecting to the database.');
    $csv = $_POST['csv-file'];
    $path = $csv;
    $row = 1;
    if (($handle = fopen($path, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $row++;
            $data_entries[] = $data ;

        }
        fclose($handle);
    }
    // this you'll have to expand
    foreach($data_entries as $line){
        $sql = $db->conn->prepare('INSERT INTO `bd_results`');

        $db->execute($line);
    }
}

但是我收到以下错误:

Fatal error: Call to undefined method stdClass::execute() in /homepages/19/d372249701/htdocs/business-sites/bowlplex-doubles-new/admin/scores.php on line 44

作为参考,我使用的代码来自:Here

我不熟悉我习惯使用mysql_connect的$ db-> conn业务!所以任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

试试这个简单的。

if (($handle = fopen("google.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $db->conn->query("INSERT INTO values('" . implode('\',\'', $data) . "');");
    }
    fclose($handle);
}

如果CSV值没有引号,您的脚本可能还需要为CSV值添加引号。如果您需要处理CSV文件中的引号和所有内容,我建议您查看http://www.fusionswift.com/2012/07/php-import-csv-to-mysql/

上的博客文章

答案 1 :(得分:0)

foreach($data_entries as $line) {
    $stmt = $db->conn->prepare('INSERT INTO `bd_results` (field1, field2) VALUES (?, ?)');
    $stmt->bindParam('ss', $field1Value, $field2Value);
    list($field1Value, $field2Value) = $line
    $stmt->execute();
}

其中$ field1Value是第一个CSV列,$ field2Value是第二个CSV列,两者都是string类型,在bindParam()方法中指定。

基本上,您需要完整地准备查询,然后您可以为其分配变量,一旦变量具有所需的值,您就可以使用execute()方法执行查询。

这是您使用预准备语句的方式。就个人而言,我会考虑Mahn的建议,并避免使用预备语句来完成这样的任务,除非你需要在上面处理数据。

mysqli_stmt::bind_param mysqli_stmt::execute