我正在尝试编写 IP 禁令。用户IP存储在数据库中。我可以手动将该用户 IP 添加到黑名单。不幸的是,下面的代码不起作用。我认为问题在于从数据库中获取数组。
$ip = $_SERVER['REMOTE_ADDR'];
$bannedips = array();
$notBanned = true; //later used to check, if ip is banned
$sql = "SELECT ip FROM ipban";
$result = mysqli_query($conn, $result);
while($row = mysql_fetch_array($result, MYSQL_NUM)){
$bannedips[] = $row;
}
if (in_array($ip, $bannedips)) {
$notBanned = false;
}
最佳答案
出于性能原因,您应该只搜索 ip 而不是查询所有条目
$ip = $_SERVER['REMOTE_ADDR'];
$notBanned = true; //later used to check, if ip is banned
$sql = "SELECT ip FROM ipban WHERE ip = ?";
if ($stmt = mysqli_prepare($conn, $sql)) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $ip);
if($result = mysqli_query($conn, $sql)){
$notBanned = false;
mysqli_free_result($result);
}
}
面向对象的风格应该是:
$mysqli = new mysqli(/* Whatever needed to establish connection */);
$ip = $_SERVER['REMOTE_ADDR'];
$notBanned = true; //later used to check, if ip is banned
$sql = "SELECT ip FROM ipban WHERE ip = ?";
if ($stmt = $mysqli->prepare($sql)){
$stmt->bind_param("s", $ip);
$stmt->execute();
if($stmt && $stmt->num_rows > 0){
$notBanned = false;
}
}
关于php - 如何使用 mysqli_fetch_array 从 MySQL 列中获取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799194/