我在今天之前从未使用过PDO,但我相信我的研究表明它对于基于查询的交易最安全。我执行了以下代码:
<?php
header('Content-type: text/plain; charset=utf-8');
$db_conn = new PDO('mysql:host=localhost;dbname=pal','root','root');
$db_conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$message = "";
$email = "someemail@gmail.com";//($_POST['email']);
$qry = $db_conn->prepare('SELECT * FROM users WHERE email = :email');
$qry->bindParam(':email', $email);
$qry->execute();
$result = $qry->fetch();
print_r($result);
echo utf8_encode($message);
?>
为了测试,我已将电子邮件的值更改为静态值而不是$ _POST。执行此操作时,它返回以下内容:
Array
(
[id] => 1
[0] => 1
[email] => someemail@gmail.com
[1] => someemail@gmail.com
[password] => test
[2] => test
[first_name] => Jay
[3] => Jay
[last_name] => Merc
[4] => Merc
[birth_year] => 1989
[5] => 1989
[gender] => Male
[6] => Male
[created_at] => 2014-07-05 22:43:19
[7] => 2014-07-05 22:43:19
)
这是我从print_r()函数得到的。我的问题是为什么我要复制一切?例如[id]显示0,下一个[0]显示[0],依此类推。第二个问题是我如何才能访问电子邮件(我希望此查询的结果只是电子邮件地址的字符串,以便检查用户是否存在以进行注册)
提前致谢
答案 0 :(得分:7)
由于:
$result = $qry->fetch();
使用整数索引和列名提取数组。
使用它来获取仅按列名索引的数组:
$result = $qry->fetch(PDO::FETCH_ASSOC);
有关索引的进一步参考,请查看此处:http://www.php.net/manual/en/pdostatement.fetch.php
第二部分,将您的查询更改为:
$qry = $db_conn->prepare('SELECT email FROM users WHERE email = :email');