具有一列的 SQL - 检查行是否存在


SQL with one column - check if row exists

我坚持了一些愚蠢的事情。 我有一个只有一列的表。 我想检查是否有一些价值,我从 url 获得(方法 $_GET)

 mysql_connect("localhost", "user", "pass") or die(mysql_error());
 mysql_select_db("db") or die(mysql_error());
 $row=htmlspecialchars($_GET['row']);
 $query = @mysql_query ("SELECT * FROM table WHERE row=$row");

 if ($result = @mysql_fetch_array($query)) { 
 echo "There is that row";
 }

 else {
 echo "There is not that row";
 }

你能告诉我出了什么问题吗?

正确的方法是检查结果集是否包含任何行。您可以使用 mysql_num_rows() 执行此操作:

if (mysql_num_rows($query)>0) {
 echo "There is that row";
}
else {
 echo "There is not that row";
}

此外,如果您的$row是字符串,则应将其括在单引号中。

注意:

请不要在新代码中使用mysql_*函数。它们不再维护并被正式弃用。看到红框了吗?请改为了解预准备语句,并使用 PDO 或 MySQLi - 本文将帮助您决定哪个语句。如果您选择PDO,这是一个很好的教程。

强制性的"你应该使用 PDO"注释。

你没有说它是什么类型的字段,也许它是一个文本字段,所以它需要用引号引起来。

$query = @mysql_query ("SELECT * FROM table WHERE row='" . $row . "');

此外,如果您删除@,您可能会看到某种错误

$query = mysql_query ("SELECT * FROM table WHERE row='" . $row . "') or die(mysql_error());

您似乎混合了行和列。查询 SQL 数据库时,通常在 WHERE 语句后指定clumnName="value"。对于具有一列名为"row"的表,您具有有效的语法。

您的查询可能存在问题,因为您没有转义您的参数,因此它将失败,$row实际上其中包含任何引号。通过使用PDO而不是不再维护mysql_功能可以避免这种情况。改为像这样查询表:

$query = @mysql_query("SELECT * FROM gvar WHERE gvarebi='{addslashes($row)}'");

要实际检查是否有任何结果,最好使用 mysql_num_rows因为它将返回指定查询的行数。因此,请使用以下内容更新您的代码:

if (mysql_num_rows($query) > 0) {
    echo "row exists";
} else {
    echo "row does not exists";
}