情景:
我从access数据库导出一个名为“Registration”的表,并使用pdo写入php中名为“isl.txt”的文件。字段用“,”分隔,记录用“\\”分隔(我知道它应该是“\ n”以方便但它不能在文本文件中换一行。不知道为什么!!所以我选择了“\” \“)
访问中的注册表:
Roll_Num,当然,商标,学科,会话
0,CS-101,89,CS,Fall94
0,CS-102,70,CS,Fall94
0,CS-103,59,CS,Fall94
代码:
$fl = fopen('isl.txt', 'w');
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb)};DBQ=D:\Islamabad.mdb;Uid=;Pwd=;");
$results = $db->query("select * from `Registration`");
while ($row = $results->fetch()) {
foreach ($row as $value) {
$lastv = end($row);
if ($value != $lastv){
fwrite($fl, $value.",");
}
}
fwrite($fl, $value."\\");
}
fclose($fl);
输出:
0,0,CS-101,CS-101,89,89,CS,CS,Fall94 \ 0,0,CS-102,CS-102,70,70,CS,CS,Fall94 \ 0,0 ,CS-103,CS-103,59,59,CS,CS,Fall94
问题:
正如您所见,每个记录值都重复两次。请检查我的代码是否错误!!
答案 0 :(得分:2)
重复值是因为您未在fetch_style
中指定 $results->fetch([fetch_style])
。根据手册 - http://php.net/manual/en/pdostatement.fetch.php - 未指定 fetch_style
时,默认为to value of PDO::ATTR_DEFAULT_FETCH_MODE (which defaults to PDO::FETCH_BOTH)
。
PDO :: FETCH_BOTH (默认值):返回由两列索引的数组 结果集中返回的名称和0索引列号
尝试更改为 -
while ($row = $results->fetch(PDO::FETCH_ASSOC)) {
OR
while ($row = $results->fetch(PDO::FETCH_NUM)) {