2013-06-12 15 views
9

Jestem całkiem nowym użytkownikiem PHP i rozglądałem się wokoło i nie mogę znaleźć odpowiedzi, której szukam.Konwertuj wyniki SQL na tablicę PHP

Chcę złożyć zapytanie SQL, takich jak ten:

$result = mysqli_query($connection, $command) 
if (!$result) { die("Query Failed."); } 

// Create my array here ... I'm thinking of maybe having to 
// make a class that can hold everything I need, but I dunno  

while($row = mysqli_fetch_array($result)) 
{ 
    // Put the row into an array or class here... 
} 

mysqli_close($connection); 

// return my array or class 

Zasadniczo chcę wziąć całą zawartość wyniku i utworzyć tablicę, że mogę uzyskać dostęp w podobny sposób, jak w wierszu. Na przykład, jeśli mam pole o nazwie "uid", chcę je uzyskać za pomocą myData ['uid']. Chyba, że ​​może być kilka wierszy, może coś bardziej podobnego do myData [0] ['uid'], myData [1] ['uid'], itp.

Każda pomoc będzie doceniona.

+0

jaka jest twoja struktura db ...? możesz zrobić "4myData ['id'] = $ row ['id'];' –

+0

Ale co, jeśli nie wiem, ile wierszy lub pól zostanie zwróconych? Próbuję również utworzyć globalną klasę SQL, która może pobierać dane dla mnie, więc nie będę nawet znać nazw pól, więc nie mogę tego przypisać. Moja DB struktura teraz jest tylko UID: int firstName: varchar (64) lastName: varchar (64) emailAddress: varchar (64) hasło: varchar (64) –

+0

można ograniczyć wynik w zapytaniu –

Odpowiedz

17

można zrobić:

$rows = []; 
while($row = mysqli_fetch_array($result)) 
{ 
    $rows[] = $row; 
} 
+0

To nie działa. Właśnie próbowałem, a następnie zrobił echo ($ rows [0] ['uid']) i nic nie dostałem ... –

+1

Czy składnia echa jest właściwa? 'echo $ rows [0] ['uid'];' – karthikr

+0

tak, to było dokładnie moje echo –

5

Można spróbować użyć mysqli_result::fetch_all() dla tablic:

$result = mysqli_query($connection, $command) 

if (!$result) { die("Query Failed."); } 

$array = $result->fetch_all(); 

$result->free(); 

mysqli_close($connection); 

UWAGA: ta działa tylko MySQLND.


Dla klasy, możesz spróbować użyć czegoś takiego:

$result = mysqli_query($connection, $command) 

if (!$result) { die("Query Failed."); } 

while($model = $result->fetch_assoc()){ 
    // Assuming ModelClass is declared 
    // And have method push() to append rows. 
    ModelClass::push($model); 
} 

$result->free(); 

mysqli_close($connection); 

albo to:

// Base Model - abstract model class. 
class ModelClass extends BaseModel { 

    // constructor 
    public function __construct(mysqli &$dbms){ 
     // $this->dbms is MySQLi connection instance. 
     $this->dbms = &$dbms; 

     // $this->models is buffer for resultset. 
     $this->models = array(); 
    } 

    // destructor 
    public function __destruct(){ 
     unset($this->dbms, $this->models); 
    } 

    public function read(){    
     $result = $this->dbms->query($command); 

     if($this->dbms->errno){ 
      throw new Exception($this->dbms->error, $this->dbms->errno); 
     } 

     $this->models = $result->fetch_all(); 

     $result->free(); 
    } 
} 
+0

byłoby lepiej niż przy użyciu pętli :) +1 –

+0

@ NullPoiиteя niestety nie pasuje do Linuksa. Spaliłem ostatni raz, kiedy go używałem. – BlitZ

+0

czy dałbyś dokumentację, o której mówią, że to będzie działać tylko z Windowsiem tylko dlatego, że powinno działać z Linuksem również ... :) –

1
//object oriented style mysqli 
//connect to your db 
$mysqli = new mysqli("host", "user", "password", "dbname"); 
$result = $mysqli->query("SELECT * FROM `table`"); 

//use mysqli->affected_rows 
for ($x = 1; $x <= $mysqli->affected_rows; $x++) { 
    $rows[] = $result->fetch_assoc(); 
} 

//this will return a nested array 
echo "<pre>"; 
print_r($rows); 
echo "</pre>"; 

edycji tego i umieścić go na klasy i po prostu zadzwoń zawsze, gdy chcesz zrobić zapytanie z bazą danych.

Powiązane problemy