我正在开发需要登录页面的网络应用程序,一切正常,但我注意到,当用户尝试连接并且他的密码包含字符时,他无法连接,并且出现一个丑陋的错误,显示 fatal error :对非对象的成员函数 rowCount() 进行调用
。
这是我的代码:
$password=$_GET["password"];
$req="SELECT * FROM `enseignant` WHERE ens_cin=$login AND ens_pass=$password";
$res=$idconnex->query($req);
if($res->rowCount() > 0)
{echo 'SUCCESS CONNECT';}
else
{echo 'FAIL CONNECT';}
当我尝试在 if()
中添加 !empty($result)
时,事情变得最糟糕..它考虑了所有这些如何在其传递中包含字符已登录用户!!但没有出现错误..
感谢您的帮助,并对我的英语不好表示抱歉。
最佳答案
我们很可能在这里处理字符串,因此值中的变量需要加引号。
WHERE ens_cin='$login' AND ens_pass='$password'";
另外,仅单独使用 PDO 并不意味着您可以安全地抵御 SQL 注入(inject)。
洞察:
确保您确实是通过 PDO 连接而不是 mysqli_
。我经常看到这类问题。
如果是这种情况,这些不同的 MySQL API 不会相互混合。
现在这个:
$password=$_GET["password"];
通过 GET 传递密码也不安全;你不知道谁可能在“监听”。您应该使用 POST。我还希望您使用哈希而不是纯文本来存储密码。
旁注:如果来自 HTML 表单,请确保您确实使用 GET 并且没有与 POST 混淆。
<小时/>"but no error appear"
您可能没有检查错误。
在连接打开后立即添加 $idconnex->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
。
添加error reporting到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。
关于PHP 错误 : Call to a member function rowCount() on a non-object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29720183/