警告:PDO::exec() 要求参数 1 为字符串
Warning: PDO::exec() expects parameter 1 to be string
我正在开发需要登录页面的 Web 应用程序,一切正常,直到我尝试转换为 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';}
出现警告:
Warning: PDO::exec() expects parameter 1 to be string, object given in...
结果 return 即使我插入正确的参数也失败了!
准备语句时,需要execute
instead of 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()
is a method, not a property, and you cannot rely on its value when you use a SELECT
query. See the manual page about rowCount()
以获取更多信息。
此外,当您发送密码等信息时,您不应使用 GET,而应使用 POST,并且您应该使用加盐哈希作为密码,绝不能使用纯文本密码。有关详细信息,请参阅 Secure hash and salt for PHP passwords。
将此添加到 jeroen 的回答中
$status = $req->fetch(\PDO::FETCH_ASSOC);
if($status)
{echo 'SUCCESS';}
else
{echo 'FAIL';}
$req->fetch(\PDO::FETCH_ASSOC);
实际上是在查询查询结果。您可以通过 var_dump($status)
查看它包含的内容。
如果找到匹配项,它将 return 关联数组;如果未找到匹配项,它将为空。
PHP 会将非空变量评估为布尔值 true
并将空、空、零元素数组评估为布尔值 false
。
if($status)
与 if($status == true)
几乎相同。您可以在 PHP 手册中找到它。
我正在开发需要登录页面的 Web 应用程序,一切正常,直到我尝试转换为 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';}
出现警告:
Warning: PDO::exec() expects parameter 1 to be string, object given in...
结果 return 即使我插入正确的参数也失败了!
准备语句时,需要execute
instead of 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()
is a method, not a property, and you cannot rely on its value when you use a SELECT
query. See the manual page about rowCount()
以获取更多信息。
此外,当您发送密码等信息时,您不应使用 GET,而应使用 POST,并且您应该使用加盐哈希作为密码,绝不能使用纯文本密码。有关详细信息,请参阅 Secure hash and salt for PHP passwords。
将此添加到 jeroen 的回答中
$status = $req->fetch(\PDO::FETCH_ASSOC);
if($status)
{echo 'SUCCESS';}
else
{echo 'FAIL';}
$req->fetch(\PDO::FETCH_ASSOC);
实际上是在查询查询结果。您可以通过 var_dump($status)
查看它包含的内容。
如果找到匹配项,它将 return 关联数组;如果未找到匹配项,它将为空。
PHP 会将非空变量评估为布尔值 true
并将空、空、零元素数组评估为布尔值 false
。
if($status)
与 if($status == true)
几乎相同。您可以在 PHP 手册中找到它。