思路:
创新互联公司专注于企业成都全网营销推广、网站重做改版、隆化网站定制设计、自适应品牌网站建设、H5高端网站建设、商城系统网站开发、集团公司官网建设、成都外贸网站建设公司、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为隆化等各大城市提供网站开发制作服务。
读取csv文件,每读取一行数据,就插入数据库
示例
文件夹结构
/
file.csv //csv大文件,这里只模拟三行数据,不考虑运行效率(PS:csv文件格式很简单,文件一般较小,解析很快,运行效率的瓶颈主要在写入数据库操作)
index.php //php文件
file.csv
singi,20
lily,19
daming,23
index.php
/**
* 读取csv文件,每读取一行数据,就插入数据库
*/
//获取数据库实例
$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'root';
$password = '';
try {
$db = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e-getMessage();
}
//读取file.csv文件
if (($handle = fopen("file.csv", "r")) !== FALSE) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
//写入数据库
$sth = $db-prepare('insert into test set name=:name,age=:age');
$sth-bindParam(':name',$row[0],PDO::PARAM_STR,255);
$sth-bindParam(':age',$row[1],PDO::PARAM_INT);
$sth-execute();
}
fclose($handle);
}
数据表
CREATE TABLE `test` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8mb4_bin',
`age` INT(10) NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
COLLATE='utf8mb4_bin'
ENGINE=InnoDB;
运行结束后,数据库中会插入csv中的三行数据
//第一种
?php
$conn = mysql_connect("主机名","用户名","密码");
mysql_select_db("数据库名",$conn);
$sql = "select * from user";
$result = mysql_query($sql);
$data="";
while($row = mysql_fetch_row($result)){
foreach($row as $v){
$data .=$v."|"; //加个树线隔开字段
}
nl2br($data); //读完一行回车
}
file_put_contents("abc.txt",$data);
//第二种
?php
$filename = "abc.txt";
$res = fopen($filename,"r");
while(!feof($res)){
$buffer = fgets($res);
$buffer = str_replace(' ', '|', $buffer);
$array = explode('|', $buffer);
foreach($array as $v){
if(strlen($v)0){
$arr[] = $v;
}
}
}
fclose($res);
//组装数组插入数据库就可以了
如果直接使用file_get_contents来读取文件,那么在文件很大的时候会很占内容,比如这个文件有1GB的时候。
这个时候使用传统的文件操作方式就好的多,因为是查找嘛,逐行读取匹配应该也是可以的,下面是我的一个建议,不知道是否满足你的要求,可以看下:
//
需要查找的内容
$search
=
'bcd';
//
打开文件
$res
=
fopen('a.txt',
'r');
while
($line
=
fgets($res,
1024))
{
//
根据规则查找
if
(strpos($line,
$search)
===
0)
{
//
根据既定规则取得需要的数据
echo
substr($line,
4,
-1);
//
这里就是你想得到的
break;
}
}
//
关闭文件
fclose($res);
首先你的需求总的来说是有3个:
1,显示总的数据
2,点击显示下一条
3,定位跳转到某一条
针对的解决办法:
1,这个对数据库而言,就是读取所有符合展示条件的信息
$where = 你的搜索条件;
$all_info = $this-db-getall('table_name','$where');
2和3的解决办法是,在数据库内有一个id字段,用于唯一标示你的信息
点击显示下一条:
假设你的当前信息id = 14 , 那么,你查询出来 id = 14+1 的信息即可,
跳转到特定的条目:
那就是你给id赋值,进行查询即可。
?php
$txt=file('aaa.txt');
echo $txt[0];
echo $txt[1];//读取第2行内容。因为数组的默认键值是0开始的
mysql_connect('127.0.0.1','root','123456');
$sql="insert into text.tab (a,b) values('$txt[0]', '$txt[1]')";
if (mysql_query($sql)) echo '插入数据库成功';
else '插入数据库失败,SQL语句:$sqlbr错误:".mysql_error();
mysql_close();
?
后面几行是我添加的内容,数据库所在服务器127.0.0.1、用户名root、密码123456、数据库test、表tab,你可能需要修改这些内容。