我有一个输出到CSV文件的脚本。但是,即使数据库中当前只有一行,但我得到的输出却在表的每一行中回显了每一列两次。
例如:1,1,John,John,Smith,Smith,2014,2014应该为1,John,Smith,2014
在我使用PDO和准备语句之前,这种方法很好用,所以我在想也许我不了解fetch()如何正确工作。下面是我的代码。知道我做错了什么吗?
// get rows $query_get_rows = "SELECT * FROM Contacts ORDER BY date_added DESC"; $result_get_rows = $conn->prepare($query_get_rows); $result_get_rows->execute(); $num_get_rows = $result_get_rows->rowCount(); while ($rows_get_rows = $result_get_rows->fetch()) { $csv .= '"'.join('","', str_replace('"', '""', $rows_get_rows))."\"\n"; } echo $csv; exit;
您应该对PDO说,您只需要一个关联数组或一个带编号的数组:
while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_ASSOC))
得到一个关联数组或
while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_NUM))
获取由列号索引的数组
从PDOStatement :: fetch
fetch_style 控制如何将下一行返回给调用方。该值必须是PDO :: FETCH_ *常量之一,默认为PDO :: ATTR_DEFAULT_FETCH_MODE的值(默认为PDO :: FETCH_BOTH)。 PDO :: FETCH_ASSOC:返回一个在结果集中返回的按列名索引的数组 PDO :: FETCH_BOTH(默认值) :返回一个数组,该数组同时在结果集中返回,并且由列名和0索引的列号索引
fetch_style
控制如何将下一行返回给调用方。该值必须是PDO :: FETCH_ *常量之一,默认为PDO :: ATTR_DEFAULT_FETCH_MODE的值(默认为PDO :: FETCH_BOTH)。
PDO :: FETCH_ASSOC:返回一个在结果集中返回的按列名索引的数组
PDO :: FETCH_BOTH(默认值) :返回一个数组,该数组同时在结果集中返回,并且由列名和0索引的列号索引