思路:
读取csv文件,每读取一行数据,就插入数据库
示例
文件夹结构
/
file.csv?//csv大文件,这里只模拟三行数据,不考虑运行效率(PS:csv文件格式很简单,文件一般较小,解析很快,运行效率的瓶颈主要在写入数据库操作)
index.php?//php文件
file.csv
index.php
/**
*?读取csv文件,每读取一行数据,就插入数据库
*/
//获取数据库实例
$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(':age',$row[1],PDO::PARAM_INT);
$sth-execute();
fclose($handle);
数据表
CREATE?TABLE?+test+?(
+id+?INT(10)?UNSIGNED?NOT?NULL?AUTO_INCREMENT,
+age+?INT(10)?NULL?DEFAULT?'0',
PRIMARY?KEY?(+id+)
)
ENGINE=InnoDB;
运行结束后,数据库中会插入csv中的三行数据
读取csv文件制定行数(行区间)
php
function get_file_line( $file_name, $line_star, $line_end){
$n = 0;
$handle = fopen($file_name,"r");
if ($handle) {
while (!feof($handle)) {
++$n;
if($line_star = $n){
$ling[] = $out;
在所有PHP代码前面加if($_POST["to"]){ php代码}
你的应该是表达提交之后才执行下面php代码根据具体情况if的条件判断可以多一点,比如如果你的三个input都有值才提交的话可以写成if($_POST["to"] $_POST["subject"] $_POST["message"])当三个都有值的时候才执行下面的php代码
应该是不会的,你能贴点代码出来不,这样比较模糊,
while ($data = fgetcsv($file)) {
$goods_list[] = $data;
foreach ($goods_list as $arr){
if ($arr[0]!=""){
echo $arr[0]."br";
fclose($file);
还有个问题就是带双引号如果你在往数据库里插入数据的时候可能会导致语法错误而不能插入
csv是以逗号和回车分隔开的 ..
你首先读取文件..
然后用explode分隔回车,
得到一个数组,再对数组内的数据遍历用逗号分隔.会得到具体的数据..
思路就这样....自己多加尝试..理解就可以..
以上就是土嘎嘎小编为大家整理的php读取csv数据的注意事项相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!