30

我正在尝试使用 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变量并从中获取数据。我需要能够阅读电子邮件和密码栏。

这是如何运作的?

4

6 回答 6

55

PDOStatement::fetch从结果集中返回一行。该参数PDO::FETCH_ASSOC告诉 PDO 以关联数组的形式返回结果。

数组键将匹配您的列名。如果您的表包含“电子邮件”和“密码”列,则数组的结构如下:

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

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

$user['email'];

对于“密码”:

$user['password'];
于 2013-05-30T22:05:42.407 回答
16

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

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

或者

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

echo '<pre>' . $resultset . '</pre>';
于 2013-05-31T13:39:10.487 回答
8

方法

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

返回字典。您可以简单地获取电子邮件和密码:

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

其他方法

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

返回一个字典列表

于 2017-07-09T16:55:49.780 回答
4

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

您可以像这样访问该name字段:$user['name'].

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

于 2013-05-30T22:06:40.220 回答
1

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

例如,获取name可以像$user['name'],等等。该方法fetch(PDO::FETCH_ASSOC)将只返回一个元组。如果要获取所有元组,可以使用fetchall(PDO::FETCH_ASSOC). 您可以遍历多维数组并获得相同的值。

于 2013-05-30T22:04:11.263 回答
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'];
于 2017-07-21T19:40:18.010 回答