2013-06-12 15 views
9

私はPHPをかなり使い慣れていて、探している特定の答えが見つからないようです。SQLの結果をPHPの配列に変換する

私はこのようなSQLクエリを、作りたい:

$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 

基本的に私は、結果の内容全体を取り、私は、行と同様の方法でアクセスすることができ、アレイを作成したいです。たとえば、「uid」というフィールドがある場合、myData ['uid']を使用してそのフィールドを取得できます。おそらくmyData [0] ['uid']、myData [1] ['uid']などのように、複数の行がある可能性があります。

助けてください。

あなたが行うことができます
+0

あなたはdb構造ですか...?あなたは '4myData ['id'] = $ row ['id'];' –

+0

のようにすることができますが、返される行数やフィールド数がわからない場合はどうすればいいですか?また、私のためにデータを取得できるグローバルなSQLクラスを作成しようとしているので、フィールドの名前を知らなくてもそのように割り当てることはできません。今 私のDB構造があるだけ UID:int型 のfirstName:VARCHAR(64) lastNameのは:VARCHAR(64) EMAILADDRESSは:VARCHAR(64) パスワード:VARCHAR(64) –

+0

クエリ –

答えて

17

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

それは動作しません。私はちょうどそれを試み、エコーを行い($ rows [0] ['uid'])、何も得られませんでした。 –

+1

エコー構文は正しいですか? 'echo $ rows [0] ['uid'];' – karthikr

+0

はい、正確に私のエコーでした。 –

5

あなたは配列のためmysqli_result::fetch_all()を使用しようとするかもしれません:

$result = mysqli_query($connection, $command) 

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

$array = $result->fetch_all(); 

$result->free(); 

mysqli_close($connection); 

注:これが唯一のMySQLNDで動作します。

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

ORこの:


クラスでは、このようなものを使用しようとする可能性があり

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

これはループを使っているほうが良いでしょう:) +1 –

+0

@ NullPoiImage @残念ながら、それはLinuxには適合しません。私は前回、私がそれを使用していたときに燃えた。 – BlitZ

+0

あなたが書いているのは、Windows OSでしか動かないと言う文書を与えるでしょうか?アフリカだからLinuxでも動くはずだから。:) –

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

編集これをクラスとだけ通話の上に置きますそれはいつでもあなたのデータベースでクエリを作成するつもりです。

関連する問題