我正在尝试使用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
变量并从中获取数据。我需要能够阅读电子邮件和密码栏。
我希望有人可以向我解释这是如何运作的。
由于
答案 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'];