PDO:如何捕获注意:尝试获取非对象

时间:2015-11-19 08:14:22

标签: php mysql pdo

我遇到PDO问题。

目前,我正在开发一个简单的登录页面,但尚未考虑SQL注入,但我找不到摆脱注意事项的方法:尝试获取非对象的属性 C:\ xampp \ htdocs \ Penston \ process.php 在线 60

我有一个数据库,其中有一封电子邮件abc@m.com和密码5555。当我做的时候

SELECT * FROM `users` WHERE `email` = 'abc@m.com' AND `password` = '5555'

它完美无缺。但是当我改为

SELECT * FROM `users` WHERE `email` = 'abc@m.com' AND `password` = 'wrong'

为了检查输入错误密码时的工作原理,它会给我

注意:尝试在 C:\ xampp \ htdocs \ Penston \ process.php 中获取非对象的属性 60

第60行是print $result->Password;。我理解,因为它在数据库中没有包含输入的用户和密码的行,所以它没有要返回的对象。但是,如何抓住那个例外呢?我不希望用户看到这个未处理的消息。我不明白为什么catch语句不起作用。

因此,如果我想处理此问题并在找不到输入的用户名和密码时显示错误的用户名/密码,我该怎么办?

这是代码,

try {
    $conn = new PDO("mysql:host=$SQL_servername;dbname=penston;", $SQL_username, $SQL_password);
    $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT * FROM `users` WHERE `email` = 'abc@m.com' AND `password` = '5555'");
    $temp = $stmt->execute();
    $result = $stmt->fetch(PDO::FETCH_OBJ);
    print $result->Password;
} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

这可能是一个简单的问题,但我是PDO的新手,所以请帮助我。

感谢。

编辑1:我忘了告诉清楚密码只是用于测试,我有加密密码但我只是想测试所以我使用这样的显式密码。

0 个答案:

没有答案