Как читать выборку (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'];