免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2294 | 回复: 5
打印 上一主题 下一主题

php to mysql [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-08-07 10:11 |只看该作者 |倒序浏览
最近刚开始研究php+mysql,写了个php去读txt文件,然后更新到mysql,但是最后一行会多出来一个0(txt文件里面没有多余的空行和空格),不知何解,还请高手指点?

谢了

php

<?php
$db = mysql_connect('127.0.0.1', 'root', '')or die('Failed to connect');
mysql_select_db('my_db', $db);
$fileHandle= @fopen("txt", "r");
if ($fileHandle)
{    while (!feof($fileHandle))
{
$rawLine = fgets($fileHandle, 4096);
$columns = preg_split("/\s+/", $rawLine);
mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$columns[0]', '$columns[1]', '$columns[2]')");
}
fclose($fileHandle);
}
?>


txt

12 34 56
9 8 7

mysql

| 12        | 34       |   56 |
| 9         | 8        |    7 |
|           |          |    0 |

论坛徽章:
0
2 [报告]
发表于 2009-08-07 10:19 |只看该作者
那个是文件结束符eof吧

论坛徽章:
0
3 [报告]
发表于 2009-08-07 10:22 |只看该作者
还请教,如何可以去掉这个0?

多谢

论坛徽章:
0
4 [报告]
发表于 2009-08-07 11:58 |只看该作者
mysql_query("DELETE FROM Persons WHERE FirstName =''");

不知道怎么样,kek

论坛徽章:
0
5 [报告]
发表于 2009-08-07 22:47 |只看该作者
可能是txt的结尾有空行,但fgets还是会读取到,这样,最后一条记录的三个值其实都是空值,FirstName, LastName应该是字符型,所以是空值,而Age的类型你应该是整型的,所以Mysql自动将空值转为0
这也是由于你代码写得不够严谨造成的
首先$rawLine = fgets($fileHandle, 4096);可以写为
$rawLine = trim(fgets($fileHandle, 4096));
fgets读取的一行中是包括最后的换行符的
$columns = preg_split("/\s+/", $rawLine);
应该是插入数据库之前判断一下$columns不能是空值或是使用preg_split中可能出现错误,从而保证插入数据库的数据的正确性
if($columns) {
    //mysql_query("INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$columns[0]', '$columns[1]', '$columns[2]')");
}

评分

参与人数 1可用积分 +5 收起 理由
bs + 5 正解

查看全部评分

论坛徽章:
0
6 [报告]
发表于 2009-08-11 10:25 |只看该作者
谢谢了,我看看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP