这是我的代码:
$q5 = "SELECT * FROM subjects WHERE name='$sn'";
$r5 = @mysqli_query($dbc, $q5);
if($r5) {
$q3 = "UPDATE subjects SET grade='$grade' WHERE name='$sn'";
$r3 = @mysqli_query($dbc, $q3);
} else {
echo "false";
//$q3 = "INSERT INTO subjects (name, grade) VALUES ('$sn', '$grade')";
//$r3 = @mysqli_query($dbc, $q3);
}
create_subject_table($sn, $assignment, $assignment_max, $dbc);
}
一开始我正在检查该行是否已存在。如果它,我使用查询来更新它,如果不是它应该插入新的。我的问题是$ r5总是如此。因此它会正常更新,但不会插入任何内容。我试图回应假,以确保我的查询是正确的,我没有看到它。有谁可以帮助我吗。我花了几个小时来解决这个问题并且无法解决这个问题......
答案 0 :(得分:1)
这是因为如果某些查询失败,mysqi_query
将返回false
,如果成功则返回true / true。在这种情况下,它将返回一个没有任何内容的对象。
你想要做的事情而不是检查是否真的,你想要做的事情如下:
if ($r5->num_rows > 0)
而不是
if ($r5)
因为第一个只有在你真正从数据库中获得结果时才会通过,而不仅仅是查询没有抛出错误。
来自mysqi_query的PHP文档页面:
失败时返回FALSE。成功的SELECT,SHOW,DESCRIBE或 EXPLAIN查询mysqli_query()将返回一个mysqli_result对象。对于 其他成功的查询mysqli_query()将返回TRUE。
答案 1 :(得分:0)
您有两种可能性来确定是否存在某一行。
方法一使用SQL计算匹配行数:
$q5 = "SELECT COUNT(*) AS number_of_subjects FROM subjects WHERE name='$sn'";
$r5 = @mysqli_query($dbc, $q5);
$row = mysqli_fetch_assoc($r5);
if ($row['number_of_subjects'] > 0) {
...
} else {
...
}
方法二使用mysqli_num_rows
计算结果集的编号:
$q5 = "SELECT * AS number_of_subjects FROM subjects WHERE name='$sn'";
$r5 = @mysqli_query($dbc, $q5);
$number = mysqli_num_rows($r5);
if ($number) {
...
} else
...
}