警告:PDO :: exec()期望参数1为字符串

时间:2015-04-18 19:43:01

标签: php mysql pdo

我正在开发需要登录页面的网络应用程序,一切正常,直到我尝试转换为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!

2 个答案:

答案 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,数组作为零元素...作为布尔值falseif($status)if($status == true)几乎相同。您可以在PHP手册中找到它。