我在数据库中有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 '';
}
答案 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个记录!