Mysql Php总是获得相同的回报

时间:2017-03-19 16:23:15

标签: php mysql

我有一个用于直接调用的PHP脚本,用于检查密钥是否在黑名单数据库中。但是,无论我尝试什么,包括mysql_num_rows,它总是返回该值不存在(返回'OK')...

我做错了什么?

<?php

$pin = $_GET['keycode'];

$cn=mysqli_connect('localhost', 'root', 'password', 'serials') or die($cn->connect_error);
$sql = "SELECT keycode FROM blacklist";
$rs = $cn->query($sql) or die(mysqli_error($cn));
while($row = mysqli_fetch_array($rs)){
if ($row[keycode] == $pin) {
    echo "BL";
    return;
}
}
echo "OK";
$cn->close(); 
?>

1 个答案:

答案 0 :(得分:3)

将您的代码更改为:

<?php  
  $cn = mysqli_connect('localhost', 'root', 'password', 'serials') or die($cn->connect_error);

  $pin =  $_GET['keycode'];

  $sql = $cn->prepare("SELECT * FROM blacklist WHERE keycode = ?;");

  $sql->bind_param('s', $pin);// set $pin to type string and bind it to the query

  $sql->execute();// execute query

  $result = $sql->get_result();// get the result

  if(mysqli_num_rows($result)>0){
     echo "Keycode Blacklisted";// inform that keycode found in blacklist
  }

  $cn->close(); 
?>

您的代码存在问题:

  1. 您尚未向$row[keycode]添加单引号,因此请将其更改为$row['keycode']
  2. 您的查询未选择所有列,但您在使用$row['acolumn']时仍然将结果视为多行。另外,您没有使用$pin来检查平等性。使用SELECT * FROM blacklist WHERE keycode = ?;,您将检查是否相等而不需要if条件。这就是我的代码更改的解释。