Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PDO prepared statement fetch() returning double results

Tags:

php

mysql

pdo

fetch

I have a script that is outputting to a CSV file. However, even though there is currently one row in the database, the output I'm getting is echoing out each column from each row in the table twice.

For example: 1,1,John,John,Smith,Smith,2014,2014 Should be 1,John,Smith,2014

This worked fine before I went with PDO and prepared statements, so I'm thinking maybe I'm not understanding how fetch() works correctly. Below is my code. Any idea what I could be doing wrong?

// 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;
like image 282
Hugo Avatar asked Jul 23 '14 21:07

Hugo


1 Answers

You should say to PDO, that you want only an associative array or a numbered array:

while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_ASSOC)) 

to get an associative array or

while ($rows_get_rows = $result_get_rows->fetch(PDO::FETCH_NUM)) 

to get an array indexed by the column number

from PDOStatement::fetch

fetch_style

Controls how the next row will be returned to the caller. This value must be one of the PDO::FETCH_* constants, defaulting to value of PDO::ATTR_DEFAULT_FETCH_MODE (which defaults to PDO::FETCH_BOTH).

PDO::FETCH_ASSOC: returns an array indexed by column name as returned in your result set

PDO::FETCH_BOTH (default): returns an array indexed by both column name and 0-indexed column number as returned in your result set

like image 186
VMai Avatar answered Oct 20 '22 17:10

VMai