2010-11-21 59 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'];