2013-02-22 45 views
10

Tôi đang cố gắng sử dụng mysqli để chuẩn bị một câu lệnh để chuyển một cách an toàn các giá trị biến cho truy vấn. Tất cả điều đó đang làm việc cho tôi, nhưng vấn đề tôi đang gặp phải là nhận được kết quả trong một mảng kết hợp. Dưới đây là cấu trúc của tôi cho đến nay:PHP mysqli - trả về một mảng kết hợp từ một câu lệnh đã chuẩn bị

$query = $c->stmt_init(); 
$query->prepare("SELECT e._id,e.description,e.eventDate,e.eventTime,e.address,e.locationDescription,i.guestId,r.guestId IS NOT NULL AS 'RSVP-ed' FROM eventList AS e JOIN inviteList AS i ON e._id = i.eventId LEFT JOIN rsvpList AS r ON r.eventId = e._id AND i.guestId = r.guestId JOIN guestList AS g ON g._id = i.guestId WHERE g.groupName = ?"); 
$query->bind_param('s',$groupName); 
if ($result = $query->execute()){ 
    $a = $result->fetch_array(MYSQLI_ASSOC); // this doesn't work :/ 
} else{ 
    error_log ("Didn't work"); 
} 

Như bạn thấy, tôi có rất nhiều cột nhận được thông qua lại vì vậy tôi muốn không phải ràng buộc họ từng để một biến.

Trên hết, mục tiêu cuối cùng là trả lại mảng kết hợp được mã hóa json cho phần còn lại của đơn đăng ký của tôi.

Tôi đã tra cứu vấn đề trong tài liệu php và trao đổi ngăn xếp và tôi đã tìm thấy các đề xuất, nhưng dường như tôi không thể làm cho chúng hoạt động. Có ai có thể cho mượn một tay không ??

Trả lời

16

Nếu bạn có phần mở rộng điều khiển Native MySql (mysqlnd), bạn có thể sử dụng phương pháp get_result để có được một ResultSet, và sau đó lấy từ nó theo cách thông thường:

$query = $c->prepare("SELECT e._id,e.description,e.eventDate,e.eventTime,e.address,e.locationDescription,i.guestId,r.guestId IS NOT NULL AS 'RSVP-ed' FROM eventList AS e JOIN inviteList AS i ON e._id = i.eventId LEFT JOIN rsvpList AS r ON r.eventId = e._id AND i.guestId = r.guestId JOIN guestList AS g ON g._id = i.guestId WHERE g.groupName = ?"); 
$query->bind_param('s',$groupName); 
$query->execute(); 
$result = $query->get_result(); 
$a = $result->fetch_array(MYSQLI_ASSOC); // this does work :) 
+1

Awesome, mà làm việc và trở về một kết mảng, nhưng nó chỉ trả về hàng đầu tiên của truy vấn. Tôi có cần phải đặt nó vào một vòng lặp foreach để kéo phần còn lại của các hàng ra và chèn chúng vào một mảng mới? –

+2

@ChrisSchmitz có, chỉ cần lặp lại 'while ($ row = $ result-> fetch_array (MYSQLI_ASSOC)) {var_dump ($ row); }; ' –

+4

Tính năng này chỉ khả dụng với mysqlnd – greg

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