2013-05-30 5 views
15

Я пытаюсь создать веб-приложение с помощью PHP, и я использую memcached для хранения пользовательских данных из БД.Как читать выборку (PDO :: FETCH_ASSOC);

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

$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 и получить данные из него. Мне нужно будет прочитать столбец электронной почты и пароля.

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

Благодаря

+8

Используйте' print_r ($ пользователю) 'для просмотра содержимого возвращается – Martin

+1

Он возвращает массив, так это значит, что я только что прочитал ему $ пользователю [„пароль“]? – PHPDEV

+1

@PHPDEV: Да. Точно :) –

ответ

30

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

Ключи массива будут соответствовать вашим именам столбцов. Если таблица содержит столбцы «электронную почту» и «пароль», то массив будет структурирован как:

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

Для чтения данных из столбца «электронной почты», сделайте следующее:

$user['email']; 

и «пароль «:

$user['password']; 
+1

Как я могу получить количество строк из возвращаемых данных? – PHPDEV

+1

[PDOStatement :: rowcount] (http://www.php.net/manual/pdostatement.rowcount.php) –

+0

@PHPDEV вам действительно не нужно количество строк –

1

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

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

+0

Это не «как массив», это * - массив. Постскриптум 'tuple' не является термином PHP :) –

1

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

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

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

9

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

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

или

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

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

Метод

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

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

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

Другой метод

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

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

+0

Как это лучше, чем 4-летний принятый ответ на этот вопрос? – iehrlich

+0

Вместо слова «массив» предпочтительнее использовать слова «список» и «словарь». – Kit

+0

«Ассоциативный массив» - это правильное слово для «словаря» :) – iehrlich

0

/* Design Pattern "шлюз таблицы данных" */

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']; 
Смежные вопросы