无法将新行插入数据库

时间:2015-03-09 21:36:14

标签: php mysql

这是我的代码:

$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总是如此。因此它会正常更新,但不会插入任何内容。我试图回应假,以确保我的查询是正确的,我没有看到它。有谁可以帮助我吗。我花了几个小时来解决这个问题并且无法解决这个问题......

2 个答案:

答案 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 
   ...
}