如何读取fetch(PDO :: FETCH_ASSOC);

时间:2013-05-30 21:59:07

标签: php pdo

我正在尝试使用PHP构建一个Web应用程序,我正在使用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变量并从中获取数据。我需要能够阅读电子邮件和密码栏。

我希望有人可以向我解释这是如何运作的。

由于

6 个答案:

答案 0 :(得分:37)

PDOStatement::fetch从结果集中返回一行。参数PDO::FETCH_ASSOC告诉PDO将结果作为关联数组返回。

数组键将与列名匹配。如果您的表包含“email”和“password”列,则数组的结构如下:

Array
(
    [email] => 'youremail@yourhost.com'
    [password] => 'yourpassword'
)

要从“电子邮件”列中读取数据,请执行以下操作:

$user['email'];

和'密码':

$user['password'];

答案 1 :(得分:13)

像任何其他关联数组一样遍历数组:

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

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

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

答案 2 :(得分:3)

PDO:FETCH_ASSOC将结果放在一个数组中,其中值被映射到它们的字段名称。

您可以访问name字段,如下所示:$user['name']

我建议使用PDO::FETCH_OBJ。它获取对象中的字段,您可以这样访问:$user->name

答案 3 :(得分:3)

方法

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

返回字典。您只需获取电子邮件和密码:

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

其他方法

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

返回词典

列表

答案 4 :(得分:1)

要读取结果,您可以像简单的php数组一样阅读它。

例如,可以像name那样获取$user['name'],依此类推。方法fetch(PDO::FETCH_ASSOC)将只返回1元组。如果要获取所有元组,可以使用fetchall(PDO::FETCH_ASSOC)。您可以浏览多维数组并获得相同的值。

答案 5 :(得分:0)

/ *设计模式&#34;表数据网关&#34; * /

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 //                   
    }
}

/ *用列&#39; user_id&#39;打印所有行只有* /

$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++;
}

/ *使用列&#39;电子邮件和密码&#39;打印user_id = 1 * /

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

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