簡體   English   中英

如何使用mysqli_fetch_array從MySQL列獲取數組

[英]How get an array from a MySQL column with mysqli_fetch_array

我正在嘗試撰寫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;
    }
}

只是改變:

while($row = mysql_fetch_array($result, MYSQL_NUM)){
    $bannedips[] = $row;

而且您無法將mysqli函數與mysql合並

$result = mysqli_query($conn, $result);
while($row = mysql_fetch_array($result, MYSQL_NUM)){

最后(編輯):

$host = "example";
$username = "example";
$password = "example";
$database = "example";

$ip = $_SERVER['REMOTE_ADDR'];
$bannedips = array();
$notBanned = true; //later used to check, if ip is banned

$connection = new mysqli($host, $username, $password, $database);

$query = $connection->query("SELECT ip FROM ipban");

while ($row = $query->fetch_array()) {
    $bannedips[] = $row['ip'];
}

if (in_array($ip, $bannedips)) {
    $notBanned = false;
}  

您可以在以下位置閱讀更多信息:

http://php.net/manual/zh/function.mysql-fetch-array.php

該問題保存在您的while循環內。 在將數據追加到$ bannedips數組的同時,您忘記了從$ row數組中選擇第零個(ip列)鍵。

$ row更改為row [0],如下所示:

while($row = mysql_fetch_array($result, MYSQL_NUM)){
    $bannedips[] = $row[0];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM