使用产品密钥检查数据行中是否存在数据

时间:2013-03-15 15:14:07

标签: php mysql

我的代码有问题。如果存在数据库行中的数据,则它可以工作。但是如果数据不存在,那么它也会给出已注册的消息12345-12345-12345-12345(样本密钥)。使用另一把钥匙。

这是代码:

   $namecheck = mysql_query("SELECT pkey FROM license_key WHERE pkey ='$userEnteredProductKey'");
      if(is_resource($namecheck) && mysql_num_rows($namecheck) > 0 ){
            $sql_result = mysql_fetch_assoc($namecheck);
            echo $userEnteredProductKey . " already registered . use another key";
   }

如果我出错了,请纠正我。

2 个答案:

答案 0 :(得分:0)

首先,在做其他任何事情之前,请逐步淘汰 mysql _ * 功能并切换为使用 PDO MySQLi 。特别是如果您的项目正在处理串行密钥或某些唯一密钥。截至目前,您的查询很容易被注入额外 SQL

攻击

回到问题:

因为它执行 echo 语句,这意味着if语句被执行,这意味着 is_resource ()和 mysql_num_rows ()都返回true。 / p>

为什么不检查数据库并再次查看是否存在 12345-12345-12345-12345 的记录,似乎 mysql_num_rows 返回> 0

另外,为什么你不要var_dump $ sql_result 并查看它打印的内容

答案 1 :(得分:0)

不建议使用mysql_query。请尝试以下方法。

$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_SELECT, DB_PORT);

$stmt = $mysqli->prepare("SELECT pkey FROM license_key WHERE pkey =?");
$stmt->bind_param('s',$userEnteredProductKey) ;

$stmt->execute();
$stmt->bind_result( $pKey );
$stmt->fetch();
$stmt->close();

if($pkey!=''){
  echo $userEnteredProductKey . " already registered . use another key";
}