Создать отдельный массив из MySQL с PHP / PDO - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь создать один массив из таблицы БД, который имеет несколько строк, например:

--------------
id   |   name
--------------
1    | value 1
2    | value 2
3    | value 3
--------------

Я хочу, чтобы созданный массив был как можно более простым, например value1, value2, value3

Я использую эту функцию

function getAll()
    {
        //select all data
        $sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";

        $prep_state = $this->db_conn->prepare($sql);
        $prep_state->execute();

        $row = $prep_state->fetch(PDO::FETCH_ASSOC);
        $this->name = $row['name'];
    }

Есть ли простой способ сделать это, возможно, с другим режимом PDO, как, например, с PDO :: FETCH_UNIQUE, или a должен использовать другой подход?

ОБНОВЛЕНИЕ - Таким образом, это работало ( благодаря @ u_mulder )

function getAll()
{
    $sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";
    $prep_state = $this->db_conn->prepare($sql);
    $prep_state->execute();

    $names = $prep_state->fetchAll(PDO::FETCH_COLUMN, 0); 
    return(implode(",",$names));

}

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Что вам нужно, это PDO::FETCH_COLUMN режим:

$sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";
$prep_state = $this->db_conn->prepare($sql);
$prep_state->execute();

// 0 indicates first column of result
$names = $prep_state->fetchAll(PDO::FETCH_COLUMN, 0); 
print_r($names);
// then do what you want.
0 голосов
/ 27 августа 2018

Используйте метод fetchAll, который возвращает массив, а затем просто возвращает ваш массив в переменной, которую вы можете использовать.

function getAll()
    {
        //select all data
        $sql = "SELECT name FROM " . $this->table_name . "  ORDER BY id";

        $prep_state = $this->db_conn->prepare($sql);
        $prep_state->execute();

        $row = $prep_state->fetchAll(); //changed this
        $return $row; //and this
    }

Затем, чтобы получить значения из этого массива.

foreach($row as $key=>$value) {
//echo your results
}

Ключом будет идентификатор, а значением будет имя.

0 голосов
/ 27 августа 2018

если вам нужно все имя в массиве, вы можете попробовать group_concat и взорвать

function getAll()
{
    //select all data
    $sql = "SELECT group_cancat(name) name FROM " . $this->table_name . "  ORDER BY id";

    $prep_state = $this->db_conn->prepare($sql);
    $prep_state->execute();

    $row = $prep_state->fetch(PDO::FETCH_ASSOC);

    // build an array from the concatenated  string pf names 
    $myArray = explode(',',  $row['name']);

    return $myArray;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...