PHP 错误 : Call to a member function rowCount() on a non-object

标签 php mysql pdo

我正在开发需要登录页面的网络应用程序,一切正常,但我注意到,当用户尝试连接并且他的密码包含字符时,他无法连接,并且出现一个丑陋的错误,显示 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/

相关文章:

php - 使用php和mysql的菜单问题

php - PDO准备语句麻烦

php - 隐藏 li 内的空行

php - 为什么所需的国家/地区下拉字段不会阻止结帐 - WooCommerce

php - dompdf/PHP 没有流式传输 PDF,只是在页面中显示代码

php - 在 Ubuntu 12.04 上安装 PHP 邮件

mysql - MySQL 中何时使用单引号、双引号和反引号

mysql - SequelizeJS - 包含带有 hasMany + joinTableName 的表。笛卡尔积

java - android将视频文件(mp4)发送到php服务器

php - mysql where 条件中的 Null 或 Not Null 值