Почему мой запрос к массиву возвращает массив объектов в PHP?

Я пытаюсь просто запустить запрос и получить результаты в массиве:

function run_query($query)
{
    $out = '';
    $db = new PDO("mysql:host=localhost;dbname=test","test","test");
    $out = $db->query($query)->fetchAll(PDO::FETCH_OBJ);
    return $out;
}

А на другом конце:

$l_o_array = $php_functions->run_query('SHOW TABLES');
$temp = implode(',', $l_o_array);

Результат: Уловимая фатальная ошибка: объект класса stdClass не может быть преобразован в строку

Я предполагаю, что это потому, что я использую FETCH_OBJ, но что мне использовать, чтобы просто получить массив строк?


person Travis Heeter    schedule 04.11.2012    source источник
comment
PDO::FETCH_ASSOC будет извлекать массив массивов, как вы используете fetchAll.   -  person air4x    schedule 04.11.2012


Ответы (2)


Вот один из способов сделать это:

function run_query($query)
{
    $out = '';
    $db = new PDO("mysql:host=localhost;dbname=test","test","test");
    $out = $db->query($query)->fetchAll();
    return $out;
}

$results = run_query('SHOW TABLES');

$tables = array();
foreach($results as $result)
    $tables[] = $result['Tables in test']; // Note, replace "test" with your database name

$temp = implode(',', $tables);
person Jesse Bunch    schedule 04.11.2012
comment
Я пытаюсь динамически построить массив в функции. Я хочу, чтобы он мог обрабатывать что-то столь же простое, как «Показать таблицы», но также и что-то более сложное, например «SELECT * FROM foo», где foo может иметь несколько столбцов и строк. - person Travis Heeter; 04.11.2012
comment
Чтобы получить массив строк, вы должны перебрать результаты (которые представляют собой массив массивов) и вытащить соответствующий столбец. Если вас устраивает массив массивов, вам просто нужно вернуть результат fetchAll(). Есть смысл? - person Jesse Bunch; 04.11.2012
comment
Хорошо, это то, что у меня сейчас есть, но метаданные не работают с PDO. Какие-либо предложения? function run_query($query) { $out = ''; $db = new PDO("mysql:host=localhost;dbname=test","test","test"); $out = $db -> query($query); $md = $out -> result_metadata(); $out = $out -> fetchAll(); $fields = $md -> fetch_fields(); $tables = array(); foreach ($fields as $field) foreach($results as $result) $tables[] = $result[$field]; return $tables; } - person Travis Heeter; 04.11.2012

попробуйте print_R();

понять задачу

<?php
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x', 'y', 'z'));
print_r ($a);
?>

С Уважением

person Anajehad Walaa    schedule 04.11.2012