Как получить имена столбцов и значения из однострочного набора результатов с помощью PDO? - PullRequest
0 голосов
/ 24 сентября 2018

Мне нужно получить все имена и значения столбцов в строке, где id = $id.

Имена столбцов должны отображаться как title;значения должны отображаться как story

Примерно так:

function story($id) {
    global $db;
    $sql = "select *  from users where id = :aid limit 1";
    $st = $db->prepare($sql);
    $st -> execute([":aid" => $id]);
    $row = $st->fetch();
    $sql = // select all column names;
    $columns = // array - result of $sql
    $story = "";
    foreach ($columns as $el) {
        $i = array_search($el, $columns);
        $val = $row[$i];
        $story .=
        "<div class='title'>" . $el . "</div>\n" .
        "<div class='story'>" . $val . "</div>\n";
    }
    echo $story;
}

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Нет нужно сделать array_search(), сделайте, как показано ниже: -

function story($id) {
    global $db;
    $sql = "select *  from users where id = :aid limit 1";
    $st = $db->prepare($sql);
    $st -> execute([":aid" => $id]);
    $row = $st->fetch(PDO::FETCH_ASSOC);
    if(count($row)>=1){
      foreach ($row as $column => $value) {
        echo "<div class='title'>" . $column . "</div>\n" .
        echo "<div class='story'>" . $value. "</div>\n";
      }
    }
}
0 голосов
/ 24 сентября 2018

Я рекомендую передавать соединение db в качестве параметра функции вместо использования объявления global.

fetch(PDO::FETCH_ASSOC) возвращает одномерный ассоциативный массив или false.

http://php.net/manual/en/pdostatement.fetch.php

Использование заглавных букв в ваших ключевых словах sql может улучшить читаемость.

Я удалил предложение LIMIT, но если ваш столбец id является PRIMARY KEY, ограничение не будетзначения.

function story($db, $id) {
    $st = $db->prepare("SELECT * FROM users WHERE id = :aid");
    $st->execute([":aid" => $id]);
    if (!$row = $st->fetch(PDO::FETCH_ASSOC)) {
        echo "no row found";
    }
    foreach ($row as $key => $val) {
        echo "<div class='title'>" . $key . "</div>\n" .
        echo "<div class='story'>" . $val . "</div>\n";
    }
}

У меня есть подозрение, что ваша таблица базы данных может быть не оптимальной.Обычно вам нужна стабильная структура столбцов, позволяющая увеличить количество строк.Если ваша таблица расширяется как по вертикали, так и по горизонтали, мне интересно, каковы ваши требования.

0 голосов
/ 24 сентября 2018

Вы подходите немного неправильно ... Когда $ sql возвращается с mysqli в качестве ассоциативного массива, он возвращает имя столбца в качестве ключа ...

, следовательно:

$columns = // array - result of $sql as an assoc array
$story = "";
foreach ($columns as $key => value) {
    $story .=
    "<div class='title'>" . $key . "</div>\n" .
    "<div class='story'>" . $value . "</div>\n";
}
...