PHP检查是否指定输入Email& Id与数据库中的ID匹配

时间:2013-03-28 23:26:27

标签: php mysql pdo

我最近从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函数,但它似乎不起作用。

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

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

谢谢!

2 个答案:

答案 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)