我的代码有问题。如果存在数据库行中的数据,则它可以工作。但是如果数据不存在,那么它也会给出已注册的消息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";
}
如果我出错了,请纠正我。
答案 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";
}