PHP, почему моя функция дважды возвращает результат массива с разными ключами? - PullRequest
3 голосов
/ 01 марта 2012

У меня проблема с одной из моих функций в PHP. Возвращает результат два раза с разными ключами…
Я хочу получить результат только один раз без цифровых клавиш.

Этот запрос и функция возвращает следующий массив:

<?php
#The query
$typo = GetRowsParams("SELECT * FROM glyphs WHERE g_OK=1");  

#The function   
function GetRowsParams($requete, $params = array())
{
global $bdd;
$stmt = $bdd->prepare($requete) or die(print_r($req->errorinfo()));;
$stmt->execute($params);
$result = $stmt->fetchAll();
return $result;
}
?>


# The Array
Array (
[0] => Array (
    [g_ID] => 1
    [0] => 1
    [g_name] => zero_Nagar.svg
    [1] => zero_Nagar.svg
    [g_height] => 1174
    [2] => 1174
    [g_width] => 352
    [3] => 352
    [g_tag] => Test
    [4] => Test
    [g_u_ID] => 2
    [5] => 2
    [g_path] => 02uploads/Test/zero_Nagar.svg
    [6] => 02uploads/Test/zero_Nagar.svg
    [g_path_PNG] => 02uploads/Test/zero_Nagar.png
    [7] => 02uploads/Test/zero_Nagar.png
    [g_OK] => 1
    [8] => 1
    )
[1] => Array (
    [g_ID] => 2
    [0] => 2
    [g_name] => A
    Nagar.svg [1] => A
            …
            …

Почему каждая строка отображается дважды с использованием разных клавиш? Где моя ошибка?

Спасибо за вашу помощь ...

Ответы [ 3 ]

3 голосов
/ 01 марта 2012

это потому, что по умолчанию php возвращает массив, в котором все данные имеют текстовый И числовой индекс. Чтобы сохранить только текстовый индекс, вставьте PDO :: FETCH_ASSOC в функцию fechAll следующим образом: stmt->fetchAll(PDO::FETCH_ASSOC);

2 голосов
/ 01 марта 2012

Добавьте аргумент PDO :: FETCH_ASSOC следующим образом:

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

(Вы можете увидеть различные стили выборки здесь: http://www.php.net/manual/en/pdostatement.fetch.php)

0 голосов
/ 01 марта 2012

Читайте о PDOStatement :: fetch . Первый аргумент - это «стиль выборки», который по умолчанию выбирает массив, похожий на приведенный выше. Если вы просто хотите, чтобы массив отображал имена полей в valuse, используйте:

$result = $bdd.fetchAll(PDO::FETCH_ASSOC);
...