2

我最近从 Mysql_* 切换到 PDO,听说它是连接和使用 MySQL 数据库的新的、更安全的方式。

我已经学习了它的许多基础知识,例如查询、准备等。

我想做什么

我目前有两个文本字段,名为“电子邮件”和“ID”。当用户注册时,他输入他的电子邮件,在他注册后他会收到他自己的 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 函数,但它似乎不起作用。

我输入了正确的电子邮件地址,但它仍在回显“失败”而不是“未失败”。

为什么这种方法不起作用?我做错了吗?

谢谢!

4

2 回答 2

1

我不认为你想获取columns,而是rows。您实际上也不会检查 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像上面那样使用循环。

于 2013-03-28T23:29:46.597 回答
0

$validate是一个包含电子邮件地址的字符串。执行此操作时,if ($validate == 0)您将类型转换$validate为整数,并且任何非数字字符串都变为(int) 0,因此比较始终为真。

更改为if ($validate === FALSE)

于 2013-03-28T23:32:46.543 回答