我有一个输出到CSV文件的脚本。但是,即使数据库中当前有一行,我得到的输出也是从表中每行反映出的两列。
例如: 1,1,约翰,约翰·史密斯,史密斯,2014,2014 应该 1,约翰,史密斯,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;
答案 0 :(得分:17)
你应该对PDO说,你只想要一个关联数组或一个带编号的数组:
while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_ASSOC))
获取关联数组或
while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_NUM))
获取由列号
索引的数组fetch_style
控制下一行将如何返回给调用者。 该值必须是PDO :: FETCH_ *常量之一,默认为 PDO :: ATTR_DEFAULT_FETCH_MODE的值(默认为 PDO :: FETCH_BOTH)。
PDO :: FETCH_ASSOC:返回由返回的列名索引的数组 在结果集中
PDO :: FETCH_BOTH(默认):返回由两列索引的数组 结果集中返回的名称和0索引列号