I'm using a mySQL statement in a PHP script to return the email address for a given user. You'll see the function below:
public static function getEmailAddress($username) {
$conn = parent::connect();
$sql = "SELECT emailAddress FROM " . TBL_USERS . " WHERE username = '". $username ."';";
try {
$st = $conn->prepare($sql);
$st->bindValue("username", $username, PDO::PARAM_STR);
$st->execute();
$emailAddress = $st->fetch();
return $emailAddress;
parent::disconnect($conn);
} catch(PDOException $e) {
die("emailAddress lookup query failed: " . $e->getMessage());
}
}
This returned an array with two elements, both being the correct email address. I changed the return statement to
return implode(array_unique($emailAddress));
which solved the problem, but there has to be a better way to do this. This seems like pretty elementary stuff, and I'd like to do it right. What's wrong?The problem is that the default response type of fetch is
PDO::FETCH_BOTH (default): returns an array indexed by both column name and 0-indexed column number as returned in your result set
I also find this quite confusing.
Specify the parameter fetch_style to either PDO::FETCH_ASSOC or PDO::FETCH_OBJ to get what you would expect.
http://php.net/manual/en/pdostatement.fetch.php
Hope this helps