当MySQL查询返回空集时该怎么办


What to do when MySQL query returns empty set?

我刚开始学习PHP和MySQL。我现在正在为课程注册做一个小项目。我使用表格coursetbl来存储课程信息,如代码、名称、配额。当用户填写申请表时,我会首先检查他/她是否填写了有效的课程代码,通过

$coursevalid=mysql_query("select * from coursetbl where courseno = '$_POST[courseno]'"); $cvalid = mysql_num_rows($coursevalid); if ($cvalid=1) {echo "Course number validated.<br />";} else {die( "Invalid course code.");}

当输入代码有效时,一切都很好。但当它不是时,$coursevalid存储一个"空集",这让我很好奇。空集的数据类型是什么?它可以在逻辑子句中使用吗,例如 if($coursevalid = '') {...} ?我用谷歌搜索了mysql空集,但没有找到令人满意的解释。希望有人能详细解释一下这个东西是如何工作的。感谢。

mysql_query()返回一个资源,然后您可以使用该资源返回各种信息,包括查询可能找到的任何数据。你不能将资源的价值与任何东西进行比较 - 它只是PHP函数使用的内部标识符。在这种情况下,没有"空集"的概念。

您可以通过几种方式进行检查。您已经在查看mysql_num_rows()以检查返回的项目数。您可以通过查找零来检查"空集"。

或者,你可以简单地从集合中检索具有 mysql_fetch_array() 或类似值的行,直到函数返回 false ,此时没有更多的行要检索。

注意:mysql_*()函数已弃用。不应将它们用于新代码。请改用mysqli_*()PDO

另请注意,您不会转义 $_POST['courseno'] 变量。这是 SQL 注入的主要目标。至少你应该在提交查询之前使用它mysql_real_escape_string(),但你应该真正考虑使用预准备语句。