2013-02-22 13 views
10

mysqliを使用して、変数値を安全にクエリに渡すために文を準備しようとしています。そのすべてが私のために働いていますが、私が取り組んでいる問題は連想配列の結果を得ることです。 はここで、これまでの私の構造です:PHP mysqli - プリペアドステートメントから連想配列を返します

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

あなたが見ることができるように、私は、変数にそれらそれぞれをバインドする必要はありませんしたいと思いますので、戻さばかりの列がたくさんあります。

さらに、最終的な目標は、アプリケーションの残りの部分にjsonエンコードされた連想配列を返すことです。

私はPHPのドキュメントとスタック交換の問題を参照して、私は提案が見つかりましたが、私はそれらを動作させるように見えることはできません。誰かが手を貸してもらえますか?

答えて

16

あなたは、MySQLネイティブドライバの拡張機能(mysqlnd)を持っている場合は、ResultSetを取得するためにget_resultメソッドを使用して、それから、通常の方法取り出すことができます。

$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

恐ろしい、連想を働いたと返されました配列を返しますが、クエリの最初の行だけを返します。残りの行を取り出して新しい配列に挿入するには、foreachループに配置する必要がありますか? –

+2

@ChrisSchmitzはい、ちょうどループwhile($行= $結果 - > fetch_array(MYSQLI_ASSOC)){var_dump($行); }; ' –

+4

これはmysqlndでのみ利用可能です – greg