我有一个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?
答案 0 :(得分:0)
看看preg_match,您应该能够使用相当简单的正则表达式来获取这些值,例如:
preg_match(/\w+\s*(\d+)\\\/(\d+)/, $row, $matches);
var_dump($matches);
要从文件中提取数据,请查看fgets
,有一个逐行读取文件的示例,以获取上述代码中的$row
变量。
然后,您可以使用INSERT语句将每一行写入数据库。
需要考虑的一些事项:
文件有多大? 您需要多久插入一次这样的数据 - 这是一次性的吗?
这些事情将影响您构建代码的方式;有多种方法可以批量插入数据,如果这只是一次性运行,那么我建议使用sed
或类似方法对文本数据进行maniuplating,然后使用所选数据库的本机方法进行批量插入(对于mysql,请参阅LOAD DATA INFILE
,或使用客户端中的\.
选项
如果文件很大并且您需要定期插入内容,请查看使用预准备语句和/或多个插入语法:
INSERT INTO mytable (name, number, anothernumber) VALUES('paul', 1, 2),('bob',2,1)
答案 1 :(得分:0)
答案 2 :(得分: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}'";
}
那是我对你的问题的看法。
答案 3 :(得分: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