我试图避免不止一次将某个游戏的数据添加到我的表中,所以我试图制作一个if语句来检查该游戏的ID是否已经在表中,但是由于某种原因if语句总是假。这是我的代码:
$a = $_GET['id'];
$colname = $_GET['colname'];
$b = "SELECT count(*)
FROM table
WHERE gameid = ".$a;
if($dup = mysqli_query($dbc, $b)){
if(mysqli_num_rows($dup)==0){
$insrt = "INSERT INTO table ($colname)
VALUES ($a)";
mysqli_query($dbc, $insrt);
}
}
答案 0 :(得分:1)
除非出现特殊情况,否则SELECT COUNT()....
查询通常会返回至少一行(如果有GROUP BY
子句则更多,否则会另外指示);您需要检查字段值是否为0,而不是结果中没有行。
答案 1 :(得分:1)
如果我是你,而不是在你的程序中使用逻辑来避免创建重复的条目,我只是告诉MySQL你的ID列应该是唯一的。请查看MySQL Reference Manual中有关列定义的信息,特别是关键字PRIMARY KEY
或.gif
。
如果指定您的ID列应该是唯一索引,那么MySQL将阻止添加具有相同ID值的另一个条目。这样,在您的程序中,您可以简单地尝试添加数据,如果它是重复的,则该过程将自动失败。作为额外的奖励,这意味着您只需要从您的程序而不是两个查询中进行一次查询。
答案 2 :(得分:0)
更改您的查询以删除聚合,然后只返回一列,例如
SELECT gameid
FROM table
WHERE gameid = ?
LIMIT 1
您不需要计算行数,您只需要知道是否返回了行。
或者,您可以在查询中添加HAVING
子句,以便在COUNT
为零时不返回行...
SELECT COUNT(*)
FROM table
WHERE gameid = ?
HAVING COUNT(*) > 0
您无需从返回的行中检索列的值,只返回一个空的结果集,并测试结果集是否为空,就像您的代码正在执行的那样。 / p>