0

我有一个 csv 文件,它在一列中包含 2000 个数据。数据格式如下:

name 100/1
name 100/2
name 105/6 
 ...

所以一般格式是'text integer_one/integer_two' 现在我希望它存储在一个有 2 列的 mysql 数据库表中。column_1 应该有数据 integer_one,column_2 应该有数据 integer_two

如何使用 php 将数据推送到 mysql 中?

4

4 回答 4

0

看看 preg_match,你应该能够使用一个相当简单的正则表达式来获取这些值,比如:

preg_match(/\w+\s*(\d+)\\\/(\d+)/, $row, $matches);

var_dump($matches);

要从文件中提取数据,请查看fgets逐行读取文件以获取$row上述代码中的变量的示例。

然后,您可以使用 INSERT 语句将每一行写入数据库。

需要考虑的一些事项:

文件有多大?您需要多久插入一次此数据 - 是一次性的吗?

这些东西会影响你构建代码的方式;有多种方法可以批量插入数据,如果这只是一次性运行,那么我建议使用sed或类似方法操作文本数据,然后使用您选择的数据库的本机方法进行批量插入(对于 mysql,请参阅LOAD DATA INFILE,或使用\.客户端中的选项)

如果文件很大并且您需要定期插入内容,请查看使用准备好的语句和/或多重插入语法:

INSERT INTO mytable (name, number, anothernumber) VALUES('paul', 1, 2),('bob',2,1)
于 2012-11-23T13:45:44.910 回答
0

使用 ph 函数fgetcsv函数读取一个 csv 文件(示例在本页中给出),然后在循环中使用每个函数并使用函数explode()解析它并从中创建查询并保存在数据库中

于 2012-11-23T13:46:37.927 回答
0

首先从提取你的价值观开始。如果您的所有数据都像您的示例一样格式化,您可以使用简单的explode.

$lines = explode(",", $data); // $data should be your file extracted into a string
foreach ($lines as $line) {
    $temp = explode(" ", $line);
    $name = $temp[0];
    $temp_2 = explode("/", $temp[1]);
    $integer_1 = $temp_2[0];
    $integer_2 = $temp_2[1];

    $query = "INSERT INTO table_two_columns SET name = '{$name}', integer_1 = '{$integer_1}', integer_2 = '{$integer_2}'";
}

好吧,这就是我对你的问题的看法。

于 2012-11-23T13:47:31.507 回答
0

看看fopen()fread()fgetcsv() php 函数来处理文件,使用它们你应该能够遍历 cvs 文件的行,如果你可以控制你的服务器配置,我会建议您可以改为查看SplFileObject,因为您可以更高效/更优雅地处理文件,并且面向对象。但要求您启用 SPL。最后一个是我的建议,因为您可以像这样阅读文件:

function random_name(){
            $file_name = "names.csv";
            if(is_readable($file_name)){
                $file = new SplFileObject($file_name);


                $file->seek($file->getSize());
                $linesTotal = $file->key();

                $file->seek(rand(1,$linesTotal-1));
                $line = $file->fgetcsv();

                return $line[4];
            }
        }

这是我的一个示例脚本,用于从 1000 个名称的 cvs 文件中获取随机名称。

当您循环并获取文件信息时,您可以使用explode(),此函数通过您定义的分隔符分隔您的字符串,在您的情况下它将是:

$array = explode("/", $myLine);

你会像这样访问:

$array[0] or $array[1] to get the value
于 2012-11-23T13:52:28.140 回答