2010-11-21 27 views
0

我試圖將MySQL表中的數據存儲到PHP數組變量中。Array or Assoc?

目前,我有這樣的:

$row = $db->query("SELECT * FROM settings"); 
$sysconfig = $row->fetch_array(); 

數據庫方案是這樣的:

property value 
online  1 
autoupd 1 
setting 1 

我應該怎麼寫上面的代碼,讓我可以使用該值,爲數據中的屬性,即

$sysconfig['online']會返回「 1" ?

var_dump($sysconfig)產生此

array(6) { [0]=> string(6) "online" ["property"]=> string(6) "online" [1]=> string(1) "1" ["propertyid"]=> string(1) "1" [2]=> string(1) "1" ["value"]=> string(1) "1" } 

print_r($sysconfig)產生此

Array ([0] => online [property] => online [1] => 1 [propertyid] => 1 [2] => 1 [value] => 1) 

由於

+1

嗯...完全相同的方式,你已經寫了嗎? :) – 2010-11-21 17:27:57

+0

我得到這個:未定義的索引:作爲PHP通知在線。 – bear 2010-11-21 17:29:53

+0

用'var_dump($ sysconfig)更新你的問題' – ajreal 2010-11-21 17:32:39

回答

2

fetch_array返回兩者締合和列舉的陣列。您可以通過添加MYSQL_ASSOC參數來指定它僅返回關聯數組。或者您可以使用fetch_assoc方法。

UPD:對於您方案,你只有「財產」和「價值」列,所以你需要通過數據集來重寫你的選擇查詢與加入或重複這樣的:

$sysconfig = array(); 
while ($line = $row->fetch_assoc()) 
    $sysconfig[ $line['property'] ] = intval($line['value']); 

//$sysconfig['online'] == 1 
+0

不能使用mysqli_result類型的對象作爲數組 – bear 2010-11-21 17:41:08

+0

@Shamil:對不起,錯字,在while循環中應該是$ line而不是$ row。 – Andrew 2010-11-21 17:45:08

+0

這工作:)謝謝! – bear 2010-11-21 17:47:12

2

什麼是你使用的課程是什麼樣的?我通常會建議使用類似的東西:

$sysconfig = mysql_fetch_assoc($row); 

這將返回該行的數組。你的$ db類是否有這樣的方法?

print_r($sysconfig); 

您應該看到返回的數組,將突出你可以用它來內訪問數據,方法的故障:如果你做以下會發生什麼。

編輯:

替換此行:

$sysconfig = $row->fetch_array(); 

有了:

while($data = $row->fetch_array()){ 
    $sysconfig[$data['property']] = $data['value']; 
} 

然後,您應該能夠爲你想訪問的結果。

+0

我正在使用一個普通的類:'$ db = new mysqli(連接詳細信息,表名)' – bear 2010-11-21 17:39:27

+0

你可以發佈print_r($ sysconfig)或var_dump($ sysconfig)的結果嗎? – a1phanumeric 2010-11-21 17:43:29

+0

我已將'print_r'添加到問題中。 – bear 2010-11-21 17:43:33

1
$result = $db->query("SELECT * FROM settings"); 

while ($row = mysql_fetch_assoc($result)) { 
    echo $row["online"]; 
    echo $row["autopd"]; 
    echo $row["setting"]; 
    // etc. 
} 
+0

不需要回聲。即使這樣,變量數組也沒有保存。 – bear 2010-11-21 17:38:54

+0

回聲只是一個示例用法。你能詳細說明你的意思是「變量數組沒有保存」嗎?它是否進入了while循環(否則你的查詢沒有返回結果)。如果它正在進入外觀,也許你可以做print_r($ row);在循環。 – 2010-11-22 06:38:00

1
$row = $db->query("SELECT * FROM settings"); 
while($data = $row->fetch_array()) 
    $sysconfig[$data['property']] = $data['value'];