【问题标题】:In PHP with PDO, how to check if database contains desired value在带有 PDO 的 PHP 中,如何检查数据库是否包含所需的值
【发布时间】:2016-03-20 13:11:24
【问题描述】:

我正在使用一个表单(仅包含电子邮件)将带有 ajax 的数据发送到我的 php 文件,我需要检查用户输入的电子邮件是否存在于我的数据库表中。

该表包含以下列:id、name、email、timestamp

在变量 $email 中,我存储了用户在表单中添加的电子邮件。

我正在使用 PDO 通过此代码连接到我的数据库

    try {
    $db = new PDO('mysql:unix_socket=/tmp/mysql51.sock;host='. DB_HOST .';dbname='. DB_NAME . ';charset=utf8', DB_USER, DB_PASS);
    } catch (PDOException $e) {
        echo 'Pripojenie zlyhalo: ' . $e->getMessage();
    }

    $query_user = $db->prepare("SELECT COUNT FROM koniecinvite as pocet WHERE email='$email'");
    $query_user->execute();
    $pocet = $query_user->fetchObject();

    if($pocet>0){
        http_response_code(200);
        echo "Email exists";
    }else {
        http_response_code(200);
        echo "Email does not exists";
    }

它不工作。我知道我需要通过电子邮件获取行数,但我需要一些帮助。

有人可以帮我解决这个问题吗?

编辑:从错误报告中我得到“注意:类 stdClass 的对象无法转换为 int ”

【问题讨论】:

  • 定义It is not working
  • @CharlotteDunois 我得到一个白色的空白屏幕,我认为问题出在 ("SELECT COUNT FROM koniecinvite as pocet WHERE email='$email'")
  • 白页表示存在PHP错误。启用错误报告。
  • 您确定您不是有意使用SELECT COUNT(col)SELECT COUNT(*) 之类的东西吗?
  • check if row exists with mysqli 的可能重复项

标签: php mysql database pdo


【解决方案1】:

首先:

SELECT COUNT FROM koniecinvite as pocet WHERE email='$email'"

应该是:

SELECT COUNT(*) FROM koniecinvite as pocet WHERE email='$email'"

由于存在 SQL 注入的危险,$email 也必须转义:https://en.wikipedia.org/wiki/SQL_injection

因此,执行查询的代码 sn-p 应该是(请注意,在字符串上我不使用变量,而是使用 :something 将被带有 bindParam 的变量替换):

$query_user = $db->prepare("SELECT COUNT FROM koniecinvite as pocet WHERE email=:email");
$query_user->bindParam(":email","$email")
$query_user->execute();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2012-02-11
    • 2017-11-07
    相关资源
    最近更新 更多