web-dev-qa-db-ja.com

SQL結果をPHP配列に変換します

私は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']などのようになります。

任意の助けをいただければ幸いです。

11
Jonathan Plumb

できるよ:

$rows = [];
while($row = mysqli_fetch_array($result))
{
    $rows[] = $row;
}
18
karthikr

配列に 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);

またはこれ:

// 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();
    }
}
6
BlitZ
//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>";

これを編集してクラスに配置し、データベースでクエリを実行するときに呼び出すだけです。

0
robertjoep