簡體   English   中英

如何將mySQL數據庫中的數據存儲到數組中?

[英]How can I store data from mySQL database into an array?

我想從mysql數據庫中創建一個數組。 這是我的表data

+--------+-------+--------+--------+
| order  |   id  |  name  |   age  |
+--------+-------+--------+--------+
|   12   |  121  |  fred  |   23   |
|   12   |  122  |  sam   |   24   | 
|   12   |  123  |  joe   |   42   |
|   12   |  124  |  alan  |   33   |
+--------+-------+--------+--------+

數組的結尾應如下所示:

array(4) {
  ["121"]=>
  array(2) {
    ["name"]=>
    string(4) "fred"
    ["age"]=>
    string(2) "23"
  }
  ["122"]=>
  array(2) {
    ["name"]=>
    string(3) "sam"
    ["age"]=>
    string(2) "24"
  }
  ["123"]=>
  array(2) {
    ["name"]=>
    string(3) "joe"
    ["age"]=>
    string(2) "42"
  }
  ["124"]=>
  array(2) {
    ["name"]=>
    string(4) "alan"
    ["age"]=>
    string(2) "33"
  }
  }

這就是我創建數組的方式:

$sql = "SELECT * FROM data WHERE order = '12'";                 
$q = $pdo->prepare($sql);
$q->execute();
$result = $sql->fetchAll();
var_dump($result); 

但是我的結果是:

array(4) {
  [0]=>
  array(20) {
    ["order"]=>
    string(10) "12"
    [0]=>
    string(10) "12"
    ["id"]=>
    string(32) "121"
    [1]=>
    string(32) "121"
    ["name"]=>
    string(12) "fred"
    [2]=>
    string(12) "fred"
    ["age"]=>
    string(32) "23"
    [3]=>
    string(32) "23"
  }
[0]=>
  array(20) {
    ["order"]=>
    string(10) "12"
    [0]=>
    string(10) "12"
    ["id"]=>
    string(32) "122"
    [1]=>
    string(32) "122"
    ["name"]=>
    string(12) "sam"
    [2]=>
    string(12) "sam"
    ["age"]=>
    string(32) "24"
    [3]=>
    string(32) "24"
  }
and so on...

我不知道如何將數組轉換為正確的形式

首先,您要組合來自不同API的調用,這是行不通的;其次,您試圖從文本字符串而不是從結果集中獲取記錄。

注意:以下內容替換了先前的答案,該答案未提供期望的結果。

在更改了數據庫不喜歡的某些列名稱之后,我想出了以下方法:

<pre>
<?php
    $some_value = 12;
    $dbh = new PDO(/*Your connect string goes here*/);
    $sql = "SELECT id, name, age FROM some_data WHERE order_id = :order_key";                 
    $stmt = $dbh->prepare($sql);
    $stmt->execute(array(':order_key'=>$some_value));
    $my_output = array();
    foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $rec)
    {
        $my_output[$rec['id']] = array('name' => $rec['name'], 'age' => $rec['age']);
    }
    var_dump($my_output);
?>
</pre>

更改變量$some_value的值將使您可以對order_id其他值運行查詢。

產生的輸出如下所示:

array(4) {
  [121]=>
  array(2) {
    ["name"]=>
    string(4) "fred"
    ["age"]=>
    int(23)
  }
  [122]=>
  array(2) {
    ["name"]=>
    string(3) "sam"
    ["age"]=>
    int(24)
  }
  [123]=>
  array(2) {
    ["name"]=>
    string(3) "joe"
    ["age"]=>
    int(42)
  }
  [124]=>
  array(2) {
    ["name"]=>
    string(4) "alan"
    ["age"]=>
    int(33)
  }
}

整理我留下的類型以供讀者練習。

如果您使用PDO,則有一種優雅的方法

$sql = "SELECT `id`, `name`, `age` FROM `data` WHERE `order` = '12'"; 
$q = $pdo->prepare($sql);
$q->execute();
$result = $q->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
var_dump($result);

另外,如果需要id作為鍵和$ result中的值,則在SQL查詢中兩次聲明id列:

SELECT `id`, `id`, `name`, `age` FROM `data` WHERE `order` = '12'

我認為這可以正常工作:

$ps = array();
while ($row = $result->fetch_assoc()) {
 $p=array();
 $p["name"]=$row["name"];
 $p["age"]=$row["age"];
 $ps[$row["id"]]=$p;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM