0

可能重复:
将 CSV 导入 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

作为参考,我使用的代码取自:这里

我不熟悉 $db->conn 业务,我习惯于 mysql_connect!所以任何帮助将不胜感激。

4

2 回答 2

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 文件中的引号和所有内容,我建议您查看我在http://www.fusionswift.com/2012/07/php-import-csv-to-mysql/上的博客文章

于 2012-07-12T22:00:09.043 回答
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 列,两者都是字符串类型,在bindParam()方法中指定。

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

这就是您使用准备好的语句的方式。我个人会接受 Mahn 的建议,并避免使用准备好的语句来完成这样的任务,除非您需要在处理数据时处理数据。

mysqli_stmt::bind_param mysqli_stmt::执行

于 2012-07-12T22:02:08.520 回答