如何检查表列中是否存在特定值

时间:2013-12-15 14:52:17

标签: php mysql sql foreign-keys

我在数据库中有2个表,它们通过名为id的列具有外键关系。 因此,我从一个表中获得了id(表示用户并且是用户表中的主键),并且想要检查用户在另一个表中具有现有数据的天气。

所以我希望在另一个表中对名为id的列运行id,如果该列中存在id,则返回值true。 我目前没有收到任何错误,但该方法没有返回任何值。所以我一定做错了什么......有任何帮助表示赞赏!

这是我在一个文件中的类和方法:

class test {

    public function dataExists ()
        {
            $db = Database::getInstance();
            $classUser = new user();
            $userId = $classUser->getUserData($_SESSION['id']);
            $user = $userId['id'];

            $query = $db->prepare("`id` SELECT * FROM `data`");

            if ($user == $query)
            {
                return true;
            } else {
                return false;
            }
        }
}

在我的视图文件中我有这个:

$classTest = new test();
$exists = $classTest->dataExists();

if ($exists == true) {

echo '';

}

2 个答案:

答案 0 :(得分:0)

目前,您正在检查mysqli_stmt对象(从prepare()返回)是否等于一个数字。您认为这种比较应如何运作?

您可以通过num_rows执行此操作,这可以从the manual

直接进行
public function dataExists () {
    //...
    if ($statement = $db->prepare("SELECT * FROM `data` WHERE `id`=?")) {
        $statement->bind_param("i", $user);
        $statement->execute();
        //...
        return ($statement->num_rows > 0);
    }
}

由于您正在使用类,因此您可能希望将查询结果存储在某个位置 - 询问它们是否存在意味着您可能希望使用它们。

我将return语句缩短为

if ($a==$b) {
    return true;
} else {
    return false;
}

等于

return ($a==$b);

答案 1 :(得分:0)

为什么不使用查询语句

SELECT count(*) FROM `data` where `id` = ?

然后只测试返回的值。

这样做的好处是只返回与您的查询匹配的记录数,而不是匹配并返回所有记录。如果您的第二个表有50,000个匹配的记录,那么对于少量记录来说可能没问题,但是您可能不想拉出所有这些记录,只是为了发现其中有50,000个记录!