Вывод записей из БД

Рейтинг: 0Ответов: 1Опубликовано: 10.02.2015

В бд есть записи. Скрин:

alt text

Запрос:

function get_lang(){
global $connection;

            $query = "SELECT * FROM language WHERE lang='".$_SESSION['lang']."'";

        $res = mysqli_query($connection, $query);
        $langs = array();
        while($row = mysqli_fetch_assoc($res)){
            $langs[] = $row;
        }
        return $langs;
    }

вывод

<?php foreach($langs as $lang): ?>

    <p class="ministry"><?=$lang['text']?></p>
            <p class="header-text"><?=$lang['text']?></p>
            <p class="header-text2"><?=$lang['text']?></p>

       <?php endforeach; ?>

> при таком запросе из базы выводит три
> одинаковы записи выводяться таким
> образом 1 1 1, а нужно 1 2 3

Ответы

▲ 1
  1. Не знаю, как вам, а мне лично mysqli не нравится. Мне больше по душе PDO.
  2. Вот пример вашей записи c PDO:

$pdo = new PDO('mysql:host=localhost;dbname=baseName;', 'root', '');
$stmt = $pdo->prepare('SELECT * FROM `languages` WHERE `lang`=:lang');
if ( $stmt->execute(array("lang"=>$_SESSION['lang'])) ) {
   $res = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
echo "<p class='ministry'>";
foreach ( $res as $item ) {
   echo "<p class='header-text'>$item</p>";
}
echo "</p>";

В данном коде:
1. Создание подключения к серверу БД.
2. Подготовка строки запроса. Здесь :lang - параметр, который будет заменяться. Преимущество данного способа в том, что нет необходимости использовать htmlspecialchars для экранирования SQL-инъекций.
3. Метод execute() возвращает истинное значение, если запрос выполняется, т.е. отсутствуют синтаксические ошибки. В скобках я отправил наш параметр, т.е. PDO сам заменит :lang на экранированное значение переменной.
4. Если запрос выполнен, то сохраняем данные из базы в ассоциативном массиве в переменной $res.
5-9. Делаем вывод данных для пользователя.