在带有PDO的PHP中,如何检查数据库是否包含所需的值


In PHP with PDO, how to check if database contains desired value

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

该表包含以下列:id、名称、电子邮件、时间戳

在变量$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"

首先:

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

所以执行查询的代码片段应该是(请注意,在字符串上我不使用该变量,而是使用 :something ,它将由带有 bindParam 的变量放置):

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