【问题标题】:Checking for email in PDO在 PDO 中检查电子邮件
【发布时间】:2016-04-02 12:35:55
【问题描述】:

在检查数据库中是否已存在电子邮件时遇到问题。

<?php
session_start();

include_once("connection.php");
$handler = new Connection;
$handler = $handler->connect();

$email = $_POST['email'];

$check = $handler->prepare("SELECT * FROM emailcollector WHERE email=':mail'");
$check->execute(array(':mail' => $email));


if($check->rowCount > 0){
  header("Location: yes.php");
}else{
  header("Location: no.php");
}
?>

我正在使用 pdo 连接到数据库。当我运行代码时,它总是说它不存在。我对此有点陌生。感谢您的帮助

【问题讨论】:

  • 在此处删除引号 email=':mail' 它将是 email=:mail
  • @Saty,还是不行
  • 现在你遇到了什么错误??
  • 不要报错,它只是跳转到 no.php 所以它做了 $check->rowCount 等于 0,这意味着该电子邮件不存在。
  • 是的,可能是。检查电子邮件是否存在于您的数据库中??

标签: php mysql database pdo


【解决方案1】:

在您的 SQL 中,删除 ':mail' 周围的引号

$check = $handler->prepare("SELECT * FROM emailcollector WHERE email=:mail");

PDO 占位符不需要任何引号,即使值是字符串。通过使用引号,您实际上是在执行以下操作,您可以看到这是不对的。

SELECT * FROM emailcollector WHERE email="'mail@mail.com'"

【讨论】:

    【解决方案2】:

    PDOStatement::rowCount() 的可能问题:

    对于大多数数据库,PDOStatement::rowCount() 不会返回受 SELECT 语句影响的行数。相反,使用 PDO::query() 发出 SELECT COUNT(*) 语句,其谓词与预期的 SELECT 语句相同,然后使用 PDOStatement::fetchColumn() 检索将返回的行数。然后您的应用程序可以执行正确的操作。

    【讨论】:

    • 您可以阅读我链接的文档页面。显示了可能的解决方案。
    【解决方案3】:

    rowCount 是一个函数而不是一个属性。因此你必须这样称呼它,注意()

    if($check->rowCount() > 0){
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-16
      • 2013-07-16
      相关资源
      最近更新 更多