我最近从Mysql_ *切换到PDO,听说它是连接和使用MySQL数据库的新的,更安全的方式。
我已经学习了很多基础知识,比如查询,准备等等。
我想做什么
我目前有两个文本字段,名为“电子邮件”和“ID”。 当用户注册时,他输入他的电子邮件,在他注册后收到他自己的ID,这是一个独特的东西。 我希望他能够在没有任何密码的情况下查看他的帐户状态。
只需输入他的电子邮件,然后点击“提交”即可。 点击提交后,系统应检查是否有一个包含相同电子邮件和列的列。 ID。 如果列中包含这些完全相同的电子邮件& ID,然后我可以创建一个while循环来从他的帐户列中获取信息,如创建日期和其他..
我的问题
我该怎么做?
到目前为止我已经做了:
if (isset($email) && isset($id) && isset($submit)) {
$fetch = $connect->prepare("SELECT * FROM users WHERE email = :email LIMIT 1");
$fetch->bindValue(':email', $email);
$fetch->execute();
$validate = $fetch->fetchColumn();
if ($validate == 0) {
echo 'failed';
} else {
echo 'not failed';
}
while($row = $fetch->fetch( PDO::FETCH_ASSOC )) {
//We can fetch here...
}
}
我的朋友建议我使用fetchColumn()替换mysql_num_columns函数,但它似乎不起作用。
我输入了一个正确的电子邮件地址,它仍在回显“失败”而不是“未失败”。
谢谢!
答案 0 :(得分:1)
我认为您不想获取列,而是行。您也不会实际检查ID,但如果需要,您只需在查询中添加AND
条件。
$fetch->execute();
if ($fetch->rowCount()) {
echo "Row was returned; match found";
}
else {
echo "No match found";
exit;
}
$row = $fetch->fetch(PDO::FETCH_ASSOC);
您可能只有一行可以获取,但如果没有,您可以像上面那样使用while
循环。
答案 1 :(得分:0)
$validate
是包含电子邮件地址的字符串。在执行if ($validate == 0)
时,您将$validate
类型转换为整数,并且任何非数字字符串都变为(int) 0
,因此比较始终为真。
更改为if ($validate === FALSE)
。