PHP PDO - Fetchall не выводит значение
Я пытаюсь выбрать простые данные из моей базы данных:
$stmt = $dbh->prepare("SELECT new_email FROM pending_emails WHERE userid=:userid AND type='email'");
$stmt->bindParam(":userid",$userdata["id"]);
$stmt->execute();
$emailUpdateData = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(count($emailUpdateData) == 1){
$emailUpdate = true;
}
Затем я пытаюсь использовать $emailUpdateData
как это:
echo $emailUpdateData["new_email"];
Но это ничего не возвращает.
Если я сделаю print_r
Я получаю это:
Array ( [0] => Array ( [new_email] => support@hotmail.com ) )
3 ответа
fetchall всегда возвращает массив строк как набор записей. Представьте, что ваш select возвращает список значений, который вам понадобится, и массив для хранения всех из них со своими ключами -> значениями в каждом из них.
Таким образом, fetchall всегда будет возвращать массив, даже если результирующий набор имеет только один результат, или вы ограничите его в предложении SQL предложением LIMIT.
В этом случае вам нужно получить доступ к массиву как
$emailUpdateData[0]["new_email"]
Если вы хотите получить только первый ряд, замените fetchAll на fetch
Измените эту строку:
$emailUpdateData = $stmt->fetchAll(PDO::FETCH_ASSOC);
в
$emailUpdateData = $stmt->fetch(PDO::FETCH_ASSOC);
fetch() возвращает 1 строку, fetchAll() возвращает все строки.
fetchAll()
возвращает массив строк; использование fetch()
вернуть один ряд.
Вы также должны добавить LIMIT 1
на ваш запрос для хорошей меры.