2013-05-30 43 views
15

我想用PHP构建一个web应用程序,我正在使用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

循环:

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

代替单词“数组”,最好使用单词“list”和“dictionary”。 – Kit

+0

“关联数组”是“词典”的适当词汇:) – iehrlich

0

/*设计模式 “表数据网关” */

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'];