php - 将数据加载到表中而不插入数据

标签 php mysql csv

我正在尝试使用 PHP 将数据从 CSV 文件导入到我的表中。我尝试在 phpmyadmin 上使用完全相同的代码,不使用反斜杠 ENCLOSED BY '"',并且导入成功。

我还检查了管理员的用户权限。

这是我的代码:

<?php
error_reporting(E_ALL); ini_set('display_errors', 1);

$pdo = new PDO('mysql:dbname=mydatabase;host=localhost;charset=utf8', 'admin', 'admin');
$pdo->exec('SET CHARACTER SET utf8');
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

try{
$query = $pdo->prepare("LOAD DATA LOCAL INFILE 'C:\feed.csv' IGNORE INTO TABLE tablename

fields terminated by ','
enclosed by '\"'
lines terminated by '\n'
IGNORE 1 LINES

(field1, field2, field3, field4)", array(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true));

$query->execute();
$query->fetchAll();

} catch (PDOException $e) {
echo 'error: ' . $e->getMessage();
}
?>

运行此代码时,我看到此错误:

General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

最佳答案

我不知道你的代码有什么问题,但你可以使用我的代码,我认为这对你很有帮助

我已经实现了这段代码,并且它是经过测试的代码。我觉得非常有用

你必须遵循一些规则:-

1.根据数据库表名称创建您的csv文件(例如:数据库表名称是users,那么csv应该是users.csv)

2.您的csv文件的第一行应该是开始数据输入后的数据库表字段名称(例如:ID、名称等)

3.您可以从以下位置下载数据源类:- http://code.google.com/p/php-csv-parser/因为我在代码下面有 require:require_once 'CSV/DataSource.php';

<?php
ini_set('memory_limit','512M');
$dbhost = "localhost";
$dbname = "excel_import";
$dbuser = "root";
$dbpass = "";

$conn=mysql_connect ($dbhost, $dbuser, $dbpass) or die ("I cannot connect to the database because: " . mysql_error());
mysql_select_db($dbname) or die("Unable to select database because: " . mysql_error());


require_once 'CSV/DataSource.php';


$filename = "users.csv";
$ext = explode(".",$filename);
$path = "uploads/".$filename;

$dbtable = $ext[0];

import_csv($dbtable, $path);


function import_csv($dbtable, $csv_file_name_with_path)
{
    $csv = new File_CSV_DataSource;
    $csv->load($csv_file_name_with_path);

    $csvData = $csv->connect();

    $res='';
    foreach($csvData  as $key)
    {
        $myKey ='';
        $myVal='';
        foreach($key as $k=>$v)
        {
            $myKey .=$k.',';
            $myVal .="'".$v."',";
          }

        $myKey = substr($myKey, 0, -1);
        $myVal = substr($myVal, 0, -1); 
        $query="insert into ".$dbtable." ($myKey)values($myVal)";
        $res=  mysql_query($query);

    }

    if($res ==1)
    {

                echo "record successfully Import.";

    }else{

                echo "record not successfully Import.";
    }
}

关于php - 将数据加载到表中而不插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056466/

相关文章:

php - 如何在 MySQL 中选择最后 n 行?

php - 插入多个 mysql 行 php Android

MySQL 从具有不同状态的列返回结果

python - 如何使用 csv 模块处理字段值内的双引号?

php - 替代动态 JavaScript 的 Smarty {literal} 标签

php - 从多个 MySQL 数据库表中删除

javascript - 创建带有表单内容的弹出窗口,然后在父页面中显示输出并发送到数据库

mysql - 查找所有自引用 M :M with zero children in Grails

javascript - 将数据从 Excel CSV 读取到 html 页面并搜索

python - 如何使用 mysql.connector 传输结果