我正在开发需要登录页面的网络应用程序,一切正常,直到我尝试转换为PDO并使用准备好的查询,这是我的代码:
$req=$idconnex->prepare("SELECT * FROM `enseignant` WHERE ens_cin=:cin AND ens_pass=:pass");
$req->bindParam(':cin',$_GET["login"]);
$req->bindParam(':pass',$_GET["password"]);
$res=$idconnex->exec($req);
if(!empty($res) AND $res->rowCount==1)
{echo 'SUCCESS';}
else
{echo 'FAIL';}
出现警告:
警告:PDO :: exec()期望参数1为字符串,对象在...中给出
即使插入正确的参数,它也会返回FAIL!
答案 0 :(得分:5)
准备语句时,您需要execute
而不是exec
,并且需要在准备时使用您设置的对象:
$req=$idconnex->prepare("SELECT * FROM `enseignant` WHERE ens_cin=:cin AND ens_pass=:pass");
$req->bindParam(':cin',$_GET["login"]);
$req->bindParam(':pass',$_GET["password"]);
$req->execute();
另请注意,rowCount()
是一种方法,而不是属性,并且在使用SELECT
查询时不能依赖其值。有关详细信息,请参阅有关rowCount()
的手册页。
此外,当您发送密码等信息时,不应使用GET,而应使用密码,并且应使用盐渍哈希作为密码,而不是纯文本密码。有关详细信息,请参阅Secure hash and salt for PHP passwords。
答案 1 :(得分:2)
将此添加到jeroen的回答
$status = $req->fetch(\PDO::FETCH_ASSOC);
if($status)
{echo 'SUCCESS';}
else
{echo 'FAIL';}
$req->fetch(\PDO::FETCH_ASSOC);
实际上是在询问查询结果。您可以通过var_dump($status)
查看其中包含的内容。
如果找到匹配则返回关联数组,如果未找到匹配则返回空白。
PHP会将非空变量计算为布尔值true
,将空元素,null,数组作为零元素...作为布尔值false
。
if($status)
与if($status == true)
几乎相同。您可以在PHP手册中找到它。