【问题标题】:How can I use a for loop to insert data from a csv table to a sql database?如何使用 for 循环将数据从 csv 表插入到 sql 数据库?
【发布时间】:2017-06-30 20:09:05
【问题描述】:

这是我正在使用的示例 csv 文件:

Column1,Column2,Column3
data1,data2,data3
data1,data2,data3
data1,data2,data3
data1,data2,data3

我的程序的目的是通过命令行将该表插入到一个php文件中,并将数据插入到一个SQL数据库中。我正在使用这个项目作为学习如何使用 MySql 的一种方式。

获取一个 csv 文件,然后将数据转换为一个或多个数组。然后创建一个数据库,并将数据插入到表中。

我没有插入我的数据,而是只得到一行空值。

<?php

/**
 * Created by PhpStorm.
 * User: 
 * Date: 6/16/2017
 * Time: 11:32 AM
 */

$servername = "localhost";
$username = "pop-user";
$password = "pop-pw";
$database = 'popdb';

parse_str(implode('&', array_slice($argv, 1)), $_GET);
$file = array_map('str_getcsv', file($argv[1]));

// connecting to MySQL
$link = mysqli_connect($servername,$username,$password);

// check if connection completed
if ($link->connect_error) {
    die("Connection failed: ". $link->connect_error);
}

//creating database
printf("Creating database...\n");
$dbcheck = mysqli_select_db($link, $database);

// if database doesn't exist, then one will be created
if (!$dbcheck) {
    $sql = 'CREATE DATABASE '. $database;
    if (mysqli_query($link, $sql)) {
        echo "Database ". $database ." created\n";
    }
    else {
        echo "Failed to create database:\n";
        echo $link->error."\n";
    }
}

printf("Creating table...");
//creating table to hold information
$sql = 'USE '. $database. ';';
printf("\r\n");
mysqli_query($link,$sql);


$sql2 = "CREATE TABLE popCensus (";
foreach ($file[0] as $rows) {
    if ($rows != end($file[0]))
        $sql2 .= "{$rows} varchar(33), ";
    else
        $sql2 .= "{$rows} varchar(33)";
}
$sql2 .= ");";

echo $sql2;
printf("\r\n");
mysqli_query($link,$sql2);

printf("Inserting data into table...\n");
$cnt = 1;
$sql3 = "";
//Not inserting data
foreach ( $file as $file[$cnt]) {
    $sql3 = "INSERT INTO popcensus VALUES ( ";
    foreach ($file[$cnt] as $rows) {
        if ($rows != end($file[$cnt]))
            $sql3 .= "{$rows} , ";
        else
            $sql3 .= "{$rows});";
    }
    printf($sql3);
    printf("\n");
    mysqli_query($link, $sql3);
    $cnt++;
    printf("cnt: ". $cnt."\n");
    $sql3 = "";
}

printf("\nDone\n");
mysqli_close($link);
?>

编辑:我能够将信息解析为数组数组。我遇到的问题是之后尝试将它们插入到表格中。

【问题讨论】:

  • 一个数据库应该是可用的,应该是一个表。 a) 您不应依赖用户输入来创建表。 b) php 使用数据库的用户不应有权创建表(危险行为),更不用说该用户应有权创建数据库;
  • 而不是将其写入数据库(暂时)。尝试将结果回显到屏幕上,查看失败的位置和原因。
  • 进一步:表名是 CaseSenSetive,具体取决于您的操作系统。 En 查看命令 LOAD DATA INFILE 以快速加载 een CSV 中的数据
  • @zod 我能够将信息解析为数组数组。我遇到的问题是之后尝试将它们插入到表格中。

标签: php mysql database


【解决方案1】:

你需要在循环中使用prepared statement

【讨论】:

    【解决方案2】:

    尝试在 foreach 循环中检查查询是否有错误结果。

    if (false === mysqli_query($link, $sql3)) {
        throw new Exception(mysqli_error($link));
    }
    

    除此之外,你真的应该使用准备语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-17
      • 1970-01-01
      • 2020-01-29
      • 2023-04-11
      • 2018-10-02
      • 2023-04-03
      相关资源
      最近更新 更多