PHP MySQL查询以检查记录是否存在


PHP MySQL Query to check if record exists or not

表中有以下数据。。

+-------------+---------------+--------------+
| activity_id | activity_name | main_unit_id |
+-------------+---------------+--------------+
|           1 | DEA           |           67 |
|           2 | DEB           |           68 |
|           3 | DEC           |           68 |
|           4 | fasdfsadf     |           74 |
+-------------+---------------+--------------+

我想添加另一个活动,但在添加之前,我必须确保main_unit_id中没有相同的活动名称。。。我写了以下查询,

$SQL_CHECK_ACTIVITY = mysql_query(
    "SELECT count(*) FROM activities " .
    "WHERE main_unit_id = '67' and activity_name = 'DEA'"
);
$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY);
echo $RESULT_SQL_CHECK_ACTIVITY;

然后打印1,这意味着针对该项目的活动已经存在。。。

$SQL_CHECK_ACTIVITY = mysql_query(
    "SELECT count(*) FROM activities " .
    "WHERE main_unit_id = '78' and activity_name = 'afsdaf'"
);
$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY);
echo $RESULT_SQL_CHECK_ACTIVITY;

然后打印1,这意味着针对该项目的活动已经存在。。。但在这种情况下没有记录。。。。

如果您想添加另一个活动,但不想在main_unit_id上重复,那么正确的方法是在字段上创建一个唯一的索引(或约束):

create unique index idx_activities_mainunitid on activites(main_unit_id);

如果您尝试插入重复项,则插入操作将失败。

mysql_num_rows将返回行数,而不是count(*)结果。

在第一个测试中,count(*)将在一个行中返回1,因此结果为1。

在第二个测试中,count(*)将在一个行中返回0,因此结果仍然是1。

您需要使用fetch函数来获得count(*)而不是mysql_num_rows的结果。

编辑

即来自:

$RESULT_SQL_CHECK_ACTIVITY = mysql_num_rows($SQL_CHECK_ACTIVITY);

收件人:

list ($RESULT_SQL_CHECK_ACTIVITY) = mysql_fetch_row($SQL_CHECK_ACTIVITY);

注意mysql_*函数的使用被认为是不推荐的,您应该使用提供更好安全性和更多功能的东西,如MySQLi或PDO

$SQL_CHECK_ACTIVITY = mysql_query("SELECT * FROM activities WHERE main_unit_id = '".$project."' and activity_name = '67' limit 1");
    if(mysql_fetch_row($SQL_CHECK_ACTIVITY)) {
        echo 'a activity against this project already exists...';
      }
      else{
}