1

我的注册页面中有这一行。

if (device_id_exists($_POST['device_id']) == true) {
           $errors[] = 'Sorry the Serial Number \'' . htmlentities($_POST['device_id']) . '\' does not exist.';
    }

我的功能页面中有这个。

function device_id_exists($device_id) {
   $device_id = sanitize($device_id);
   $query = mysql_query("SELECT COUNT(`numbers`) FROM `devicenumbers` WHERE `numbers` = '$numbers'");
   return (mysql_result($query, 0) == 0) ? true : false;

如果我运行此查询SELECT COUNT(numbers ) FROMdevicenumbers WHEREnumbers = '1234567890' (有效数字),它将返回 1 = match found 对吗?如果我输入一个虚假数字,它会返回一个“0”。发生的情况是,当有一个有效数字时,它仍然返回该数字不存在的错误。如果我将结果更改为 == 1 它会提交任何数字吗?我是 DB 的新手,感谢任何帮助。我希望我提供了足够的信息。

4

2 回答 2

2

看起来你正在调用不正确的变量。在 device_id_exists() 函数中,您接受一个名为$device_id. 但是,当您执行查询时,您调用的似乎是一个未定义的变量:$numbers. 我怀疑$numbers应该重命名为$device_id.

我看到你$device_id来自一个表格帖子。我强烈建议您转义该变量,mysql_real_escape_string()以确保您免受 SQL 注入。请注意,sanitize()它不能防止 SQL 注入!

另外一点,我建议使用 utilizngmysql_num_rows()而不是mysql_result()因为mysql_result()实际上要求数据库服务器返回实际结果,而您真正关心的是条目是否存在,而不是实际值。

function device_id_exists($device_id) {
  $device_id = sanitize($device_id);
  $device_id = mysql_real_escape_string($device_id);
  $query = mysql_query("SELECT COUNT(`numbers`) FROM `devicenumbers` WHERE `numbers` = '$device_id'");
  return mysql_num_rows($query) ? True : False;
}
于 2013-03-25T17:35:54.737 回答
0

我对 mysql 结果集有类似的问题,即使没有记录(在选择查询中使用 max() 时,它也会返回 nums_rows == 1 - 在您的情况下,您使用了 count())... 而不是检查 mysqlquery 0,检查结果集是否为空(这就是我解决问题的方法)..例如。if(!empty(mysql_result($query))) ?真假;

于 2013-03-25T17:39:33.750 回答