I’m trying to return a comma separated list of location names from a database.
So far I have the SQL statement that I know works because it returns the correct results when tested in phpMyAdmin.
I’m now trying to get the results returned and printed on screen in php.
The code I have bellow only seems to return the first result.
JavaScript
x
$sql = "SELECT user_locations.location_id, location.name AS LocName FROM user_locations INNER JOIN location ON user_locations.location_id=location.id WHERE user_id = '" . $id . "'";
$query = mysqli_query($conn, $sql);
while ($row = $query->fetch_assoc()) {
$array[] = $row['LocName'];
$comma_separated = implode(",", $array);
return $comma_separated;
}
Advertisement
Answer
You need to remove the implode
and return
outside your while
loop, otherwise your loop will stop after the first value:
JavaScript
$sql = "SELECT user_locations.location_id, location.name AS LocName
FROM user_locations
INNER JOIN location ON user_locations.location_id=location.id
WHERE user_id = '" . $id . "'";
$query = mysqli_query($conn, $sql);
while ($row = $query->fetch_assoc()) {
$array[] = $row['LocName'];
}
$comma_separated = implode(",", $array);
return $comma_separated;
Note that you can achieve this result directly in your query using GROUP_CONCAT
:
JavaScript
$sql = "SELECT GROUP_CONCAT(location.name) AS LocName
FROM user_locations
INNER JOIN location ON user_locations.location_id=location.id
WHERE user_id = '" . $id . "'";
$query = mysqli_query($conn, $sql);
$row = $query->fetch_assoc();
$comma_separated = $row['LocName'];
return $comma_separated;
Note that dependent on the source of your $id
value, you may need to look into prepared statements to protect yourself from SQL injection.