2013-04-29 10 views
11

Jestem nowy w użyciu instrukcji $ pdo, więc może to być coś prostego, czego jeszcze nie czytałem na php.net. Otrzymuję zduplikowane wyniki podczas wysyłania zapytania do bazy danych.PDO zwracające niepoprawne, ale powielone dane. Klucz nie znajduje się w bazie danych.

Wynik:

[0] => Array 
    (
     [umeta_id] => 31 
     [0] => 31 
     [user_id] => 2 
     [1] => 2 
     [meta_key] => fbmeta 
     [2] => fbmeta 
     [meta_value] => someMetaValueStuff; 
     [3] => someMetaValueStuff; 
    ) 

Kwerenda jest dość prosta:

function getData(){ 
    global $pdo; 
    $query = $pdo->prepare('SELECT * FROM usermeta WHERE meta_key = "fbmeta" LIMIT 0,30'); 
    $query->execute(); 

    return $query->fetchAll(); 
} 

print_r(getData()); 

Problem polega na tym, że wymienione klawisze (umeta_id, user_id, meta_key, meta_value) istnieją, klawisze numeryczne nie rób. W jaki sposób zapytanie zwraca te? A jak mogę zapobiec ich zwrotowi?

+0

zanim ktoś pyta, tak ja ręcznie sprawdzane i ogranicza bazę do małej kolekcji, więc duplikaty naprawdę nie istnieją. – Nukeface

Odpowiedz

21

To nie duplikatów, to tylko obecny FETCH_MODE używasz. Aby uzyskać tylko klucze skojarzeniowe, musisz je określić jako takie; domyślnie pobiera jako oba.

Zastosowanie tak:

$query->fetchAll(PDO::FETCH_NUM); // to fetch with numeric indexes 
$query->fetchAll(PDO::FETCH_ASSOC); // to fetch with associative indexes 

fetchAll docs
fetch docs

+2

Fajnie to naprawiłem. Szkoda, że ​​nie mogę wybrać 2 odpowiedzi jako odpowiedzi, zarówno ty, jak i Yogesh byliście przy tym w tym samym czasie. – Nukeface

+0

@Nukeface Myślę, że to moje pierwsze ... :). Ale możesz zaakceptować czyjąś odpowiedź, to twój wybór ... :) –

+1

Zrobię, gdy zegar się odlicza, byliście szybcy;) Wybieram ten jednak, dociągi docs poszły do ​​funkcji pobierania, gdzie powinienem był zauważyć różnice w moim pierwszym przejrzeniu, i nie. – Nukeface

9

To nie jest zduplikowane dane. fetchAll zwraca dane w tablicy numerycznej oraz tablicy asocjacyjnej.

Zobacz Docs

użyć tego do pobierania tylko asocjacyjna

return $query->fetchAll(PDO::FETCH_ASSOC);