Как читать выборку (PDO:: FETCH_ASSOC);

Я пытаюсь создать веб-приложение с помощью PHP, и я использую memcached для хранения пользовательских данных из базы данных.

Например, скажем, что у меня есть этот код:

 $sql    = "SELECT * FROM users WHERE user_id = :user_id";
$stmt   = $this->_db->prepare($sql);
$result = $stmt->execute(array(":user_id" => $user_id));
$user   = $stmt->fetch(PDO::FETCH_ASSOC);

Я не уверен, как читать переменную $user и получать данные из нее. Мне нужно будет прочитать столбец электронной почты и пароля.

Я надеялся, что кто-то сможет объяснить мне, как это работает.

Спасибо

Ответы

Ответ 1

PDOStatement:: fetch возвращает строку из набора результатов. Параметр PDO::FETCH_ASSOC сообщает PDO возвращать результат как ассоциативный массив.

Ключи массива будут соответствовать именам столбцов. Если ваша таблица содержит столбцы "email" и "password", массив будет структурирован следующим образом:

Array
(
    [email] => '[email protected]'
    [password] => 'yourpassword'
)

Чтобы прочитать данные из столбца "email", выполните следующие действия:

$user['email'];

и для 'password':

$user['password'];

Ответ 2

Прокрутите массив, как и любой другой ассоциативный массив:

while($data = $datas->fetch( PDO::FETCH_ASSOC )){ 
     print $data['title'].'<br>'; 
}

или

$resultset = $datas->fetchALL(PDO::FETCH_ASSOC);

echo '<pre>'.$resultset.'</pre>';

Ответ 3

Чтобы прочитать результат, вы можете прочитать его как простой php-массив.

Например, получение name может выполняться как $user['name'] и т.д. Метод fetch(PDO::FETCH_ASSOC) возвращает только один кортеж tho. Если вы хотите получить все кортежи, вы можете использовать fetchall(PDO::FETCH_ASSOC). Вы можете пройти через многомерный массив и получить значения одинаковые.

Ответ 4

PDO:FETCH_ASSOC помещает результаты в массив, где значения отображаются на их имена полей.

Вы можете получить доступ к полю name следующим образом: $user['name'].

Я рекомендую использовать PDO::FETCH_OBJ. Он извлекает поля в объекте, и вы можете получить доступ к этому: $user->name

Ответ 5

Метод

$user = $stmt->fetch(PDO::FETCH_ASSOC);

возвращает словарь . Вы можете просто получить электронную почту и пароль:

$email = $user['email'];
$password = $user['password'];

Другой метод

$users = $stmt->fetchall(PDO::FETCH_ASSOC);

возвращает список словаря

Ответ 6

/* Шаблон проектирования "шлюз данных таблицы данных" */

class Gateway
{
    protected $connection = null;

    public function __construct()
    {
        $this->connection = new PDO("mysql:host=localhost; dbname=db_users", 'root', '');
    }

    public function loadAll()
    {
        $sql = 'SELECT * FROM users';
        $rows = $this->connection->query($sql);

        return $rows;
    }

    public function loadById($id)
    {
        $sql = 'SELECT * FROM users WHERE user_id = ' . (int) $id;
        $result = $this->connection->query($sql);

        return $result->fetch(PDO::FETCH_ASSOC);
        // http://php.net/manual/en/pdostatement.fetch.php //                   
    }
}

/* Вывести все строки только с помощью столбца 'user_id' */

$gateway  = new Gateway();
$users    = $gateway->loadAll();

$no = 1;
foreach ($users as $key => $value) {
    echo $no . '. ' . $key . ' => ' . $value['user_id'] . '<br />';
    $no++;
}

/* Распечатать user_id = 1 со всеми столбцами */

$user = $gateway->loadById(1);

$no = 1;
foreach ($user as $key => $value) {
    echo $no . '. ' . $key . ' => ' . $value . '<br />';
    $no++;
}

/* Распечатать user_id = 1 с адресом электронной почты и паролем колонки */

$user = $gateway->loadById(1);

echo $user['email'];
echo $user['password'];