Я не думаю, что PDO может сделать это напрямую.Существуют и другие оболочки, такие как ADODb с GetAssoc
$array=$db->GetAssoc("select user_id,user_name,city from user");
Однако любая оболочка просто получает результат и создает массив, как вы описали в своем вопросе.Единственное отличие состоит в том, что ваше предложение сначала извлекает весь набор результатов в массив, а затем генерирует ваш ассоциативный массив из этого.
Если вы используете PDO, тогда более эффективным способом использования памяти будет считывание результатов.построчно и построим массив таким образом.