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 на ваш запрос для хорошей меры.

Другие вопросы по тегам