0

データベースからデータを取得して配列に並べ替えるのに問題があります。

これが私の現在のコードです:

各エンジンをループして、各サーバー ID で並べ替えられた配列を作成しています。

for($i=0; $i <= $servers_default_engines_count; $i++){

        //get all servers with this engine type, and get how many
        $query = $db->query("SELECT `id` FROM `cgshop_servers` WHERE `server_engine` = $i");
        $server_id = mysql_fetch_row($query);

        $server[$i] = array();  
        array_push($server[$i], $server_id); 

    };

mysql_fetch_row の結果:

    [0] => Array
        (
            [0] => Array
                (
                    [0] => 2
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => 1
                )
        )
)

また:

[0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => Array
        (
            [0] => 1
        )

しかし、私はそれを次のように返そうとしています: () は説明のために配置されています。

Array(
   [0] (engine1) => Array(

      [0](server1) => 2 (serverid)
   )
   [1(engine2)] => Array(

      [0](server1) => 1 (serverid)
      [1](server2) => 3 (serverid)
   )
)

これは mysql テーブルの現在のデータです: cgshop_servers:

id   server_name   server_ip    serevr_port    server_engine    source_engine
1    test1         195.62.14.65 15464          1                1
2    test2         195.62.14.63 15464          0                0
3    test3         195.64.14.62 15465          1                1
4

2 に答える 2

0

準備済みステートメントを使用していると言ったので、間違ってフェッチしています。以下は更新されたコードです。使用できます。

$server = array();
for($i=0; $i <= $servers_default_engines_count; $i++){
    //get all servers with this engine type, and get how many
    $sth = $db->prepare("SELECT `id` FROM `cgshop_servers` WHERE `server_engine` = ?");
    $sth->bind_param('i', $i);
    $sth->execute();
    $server[$i] = $sth->fetch();
};

または、このようなループなしで単一のクエリでフェッチできる方がよいでしょう。

$totalServerCounts = range(0, $servers_default_engines_count);
$sth = $db->query("SELECT `id` FROM `cgshop_servers` WHERE `server_engine` IN(".implode(', ', $totalServerCounts).")");
$servers = $sth->fetch_all();
于 2012-07-25T23:21:08.747 に答える
0

mysql_fetch_assoc情報)を使ってみましたか

mysql_fetch_assoc — 結果行を連想配列としてフェッチする


使用例

 $mysql_query = mysql_query("SELECT * FROM `cgshop_servers` WHERE `server_engine` = ?", $i);
 $my_array = mysql_fetch_assoc($mysql_query);
 print_r($my_array);
于 2012-07-26T00:25:22.430 に答える