2013-06-12 31 views
9

Tôi khá mới đối với PHP và tôi đã tìm kiếm và không thể tìm thấy câu trả lời cụ thể mà tôi đang tìm kiếm.Chuyển đổi kết quả SQL thành mảng PHP

Tôi muốn thực hiện một truy vấn SQL, như thế này:

$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 

Về cơ bản tôi muốn đưa toàn bộ nội dung của kết quả và tạo ra một mảng mà tôi có thể truy cập trong một thời trang tương tự như hàng. Ví dụ, nếu tôi có một lĩnh vực được gọi là 'uid', tôi muốn có thể nhận được thông qua myData ['uid']. Tôi đoán vì có thể có nhiều hàng, có thể giống như myData [0] ['uid'], myData [1] ['uid'], v.v.

Mọi trợ giúp sẽ được đánh giá cao.

+0

cấu trúc db của bạn là gì ...? bạn có thể làm như '4myData ['id'] = $ row ['id'];' –

+0

Nhưng nếu tôi không biết có bao nhiêu hàng hoặc trường sẽ được trả về? Tôi cũng đang cố gắng tạo một lớp SQL toàn cục có thể lấy dữ liệu cho tôi, vì vậy tôi thậm chí sẽ không biết tên của các trường để tôi không thể gán như thế. cấu trúc DB của tôi ngay bây giờ chỉ là uid: int firstName: varchar (64) lastName: varchar (64) EmailAddress: varchar (64) mật khẩu: varchar (64) –

+0

bạn có thể giới hạn kết quả trong truy vấn –

Trả lời

17

Bạn có thể làm:

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

Điều đó không hiệu quả. Tôi chỉ cố gắng và sau đó đã làm một tiếng vang ($ hàng [0] ['uid']) và không có gì ... –

+1

Cú pháp echo có đúng không? 'echo $ rows [0] ['uid'];' – karthikr

+0

có chính xác là tiếng vang của tôi –

5

Bạn có thể thử sử dụng mysqli_result::fetch_all() cho mảng:

$result = mysqli_query($connection, $command) 

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

$array = $result->fetch_all(); 

$result->free(); 

mysqli_close($connection); 

LƯU Ý: này chỉ làm việc với MySQLND.


Đối với lớp, bạn có thể thử sử dụng một cái gì đó như thế này:

$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); 

HOẶC này:

// 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

sẽ tốt hơn sau đó sử dụng vòng lặp :) +1 –

+0

@ NullPoiиteя thật không may, nó không phù hợp với Linux. Tôi đã đốt cháy lần trước, khi tôi đang sử dụng nó. – BlitZ

+0

bạn sẽ cung cấp cho tài liệu mà họ đang nói điều này sẽ chỉ làm việc với các cửa sổ os chỉ vì afaik nó nên làm việc với linux cũng ... :) –

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>"; 

chỉnh sửa này và đặt nó trên một lớp và chỉ cần gọi nó bất cứ lúc nào bạn sẽ thực hiện một truy vấn với cơ sở dữ liệu của bạn.

Các vấn đề liên quan