簡體   English   中英

簡化php代碼-連接數據庫

[英]Simplify php code - connect to a database

在這里,我有一個連接到數據庫的php代碼,通過id選擇一行,並使用while循環從該行創建一個關聯數組。 我是否必須一遍又一遍地編寫此代碼,以通過id從其他行創建數組? 也許有機會以某種方式簡化此php代碼? 請看我的代碼。 順便說一句,我是新來的PHP ...

<?php    
$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = '';
$db = '_erica';
$conn = new mysqli($dbhost, $dbuser, $dbpass,$db);

$sql1 = "SELECT * FROM pics WHERE id = 1;";
$sql2 = "SELECT * FROM pics WHERE id = 2;";
$sql3 = "SELECT * FROM pics WHERE id = 3;";
$sql4 = "SELECT * FROM pics WHERE id = 4;";
$sql5 = "SELECT * FROM pics WHERE id = 5;";
$sql6 = "SELECT * FROM pics WHERE id = 6;";
$result1 = $conn->query($sql1);
$result2 = $conn->query($sql2);
$result3 = $conn->query($sql3);
$result4 = $conn->query($sql4);
$result5 = $conn->query($sql5);
$result6 = $conn->query($sql6);

while($row1 = $result1->fetch_assoc()) {
    $bcgrnd = $row1["link"];
}

while($row2 = $result2->fetch_assoc()) {
    $recipes = $row2["link"];
}

while($row3 = $result3->fetch_assoc()) {
    $header = $row3["link"];
}

while($row4 = $result4->fetch_assoc()) {
    $menu = $row4["link"];
}
while($row5 = $result5->fetch_assoc()) {
    $beauty = $row5["link"];
}

while($row6 = $result6->fetch_assoc()) {
    $kids = $row6["link"];
}

?>

您可以在一個查詢中執行此操作:

$sql = "SELECT * FROM pics WHERE id IN (1,2,3,4,5,6);";
$result = $conn->query($sql);

然后,您可以像這樣遍歷所有結果:

$data = array();
while ($row = $result->fetch_assoc()) {
    $id = $row["id"];
    $link = $row["link"];
    $data[$id]["link"] = $link;

    // add more fields if you want
}

要訪問例如ID 1的鏈接,只需執行以下操作:

$data[1]["link"];

您可以為此編寫一個或兩個簡單的函數。 此外,請注意,您的代碼容易受到SQL Injection的攻擊。 這是一個示例,您可以使用一些簡單的功能來實現此目的:

<?php
    function DB() {
        $dbhost = 'localhost';
        $dbuser = 'root';
        $dbpass = '';
        $db = '_erica';
        return new mysqli($dbhost, $dbuser, $dbpass,$db);
    }

    function query($id) {
        $query = "SELECT * FROM `pics` WHERE `id` = $id";
        return DB()->query($query);
    }

    $result = query(1); // will fetch records for ID 1
    while($row = $result->fetch_assoc()) {
        $bcgrnd = $row["link"];
    }

    $result = query(2); // will fetch records for ID 2
    while($row = $result->fetch_assoc()) {
        $bcgrnd = $row["link"];
    }
?>

通過采用這種方法,您可以獲取特定ID的數據。 如果您不喜歡此解決方案,請考慮使用MySQL IN子句

MySQL in()函數在給定參數中找到匹配項,您可以使用它

select pics where id IN(1,2,3,4,5,6) 

嘗試這個。

 <?php    
    $dbhost = 'localhost';
    $dbuser = 'root';
    $dbpass = '';
    $db = '_erica';
    $conn = new mysqli($dbhost, $dbuser, $dbpass,$db);

    $sql = "SELECT * FROM pics WHERE id IN (1,2,3,4,5,6);";

    $result = $conn->query($sql);

    while($row = $result->fetch_assoc()) {
        $bcgrnd[$row["id"]][] = $row["link"];
    }

    ?>

為什么不嘗試查詢並將其限制為6個結果,僅提取6個結果就占用更少的資源:

SELECT * FROM `pics` ORDER BY `[PRIMARY KEY]` LIMIT 6

暫無
暫無

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

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