Помогите пожалуйста вывести на pdo корректно массив $user из msSQL, в массиве $user выводится только username и password, id и phone выдает null

case 'login':

if(isTheseParametersAvailable(array('username', 'password'))){
  $username = $_POST['username'];
  $password = md5($_POST['password']);

  $stmt = $db->query("SELECT id, username, email, phone FROM users WHERE username='$username' AND password='$password'");
  $stmt->setFetchMode(PDO::FETCH_ASSOC);

  $stmt->execute();
  $rows = 0;
  while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    $rows++;
  }
  if($rows==1){  


  $user = array(
  'id'=>$id, 
  'username'=>$username,
  'password'=>$password, 
  'phone'=>$phone
  );

Ответы (2 шт):

Автор решения: 4 kilograms
  1. Используйте более корректный синтаксив в запросе, это вам пригоидтся)
$stmt = $db->query("SELECT `id`, `username`, `email`, `phone` FROM `users` WHERE `username`='".$username."' AND `password`='".$password."' ");

У вас в переменную $user падают не данные из БД, а данные из $_POST, поэтому вы только их и можете увидеть

Попробуйте сделать так, положите в переменную $user = $stmt->execute();

и сразу var_dump($user); Что выводится?

  1. Готовьтесь получить кучу сладких комментов в сторону MD5 в пароле)
→ Ссылка
Автор решения: Slava Rozhnev
<?php

$username = $_POST['username'];
$password = md5($_POST['password']);

$stmt = $pdo->prepare("SELECT id, username, email, phone FROM users WHERE username=? AND password=?");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$stmt->execute([$username, $password]);
  
if($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  $user = array(
      'id'=>$row['id'], 
      'username'=>$row['username'],
      'password'=>$row['password'],
      'phone'=>$row['phone']
  );
}

run PHP online

→ Ссылка