2016-02-18 2 views
0

Здесь у меня есть php-код, который подключается к базе данных, выбирает строку по id и создает ассоциативный массив из этой строки с использованием цикла while. Должен ли я снова писать этот код для создания массивов из других строк по id? Может быть, есть шанс упростить этот PHP-код? Посмотрите мой код. КСТАТИ Я новичок в 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"]; 
} 

?> 
+2

SELECT * FROM pics WHERE id in (1,2,3,4,5,6); – devpro

+0

И чем '$ bcgrnd [$ row1 [" id "]] [] = $ row1 [" link "];' – devpro

+1

Спасибо! Супер!!! – Kirill

ответ

2

Вы можете сделать это в одном запросе:

$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"]; 
+0

Спасибо! Супер!!! – Kirill

0

MySQL in() функция находит совпадение в заданных аргументов, вы можете использовать его

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

Попробуйте это.

<?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"]; 
    } 

    ?> 
0

Почему бы не попробовать запрос и ограничить его до 6 результатов, она занимает меньше ресурсов, просто потянув 6 результатов:

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

Вы можете написать одну или две простые функции для этого. Кроме того, обратите внимание, что ваш код уязвим для 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"]; 
    } 
?> 

Приспосабливаясь этот подход, вы можете получить данные для определенного идентификатора. Если вам не нравится это решение, рассмотрите возможность использования MySQL IN clause.

+0

спасибо !! Супер!!! – Kirill

Смежные вопросы