2010-11-03 51 views
1

好吧,所以基本上我的代码没有按预期工作..所以我把它完全分开,甚至把这个查询放在页面顶部;在价值观上尝试过硬编码,但仍然无法正常工作。这个特定的查询应该返回5行数据到$武器数组,但它不工作。在SQL查询中遇到问题...在PHP中(非常简单的代码)

$weapons_sql = "SELECT weapon_id, weapon_name, weapon_strength FROM Weapon_Info WHERE weapon_id BETWEEN 1 AND 5"; 
$weapons_query = mysql_query($weapons_sql); 
$weapons = mysql_fetch_array($weapons_query); 


print_r($weapons); 

在DATABSE所以weapon_id是SMALLINT(8)或相当的东西,(确切长度IM不确定大气压)..并且它具有在表30点的行,weapon_id范围从1-30

这个特殊的代码片段运行时的回报:

Array ([0] => 1 [weapon_id] => 1 [1] => Humvee [weapon_name] => Humvee [2] => 100 [weapon_strength] => 100) 

我只是不明白它..在我的整个项目工程每一个其他查询保存这一个。请帮忙?我也尝试用> = < =运算符替换BETWEEN运算符,该运算符输出相同的结果。

+0

你期望得到你的结果? – 2010-11-03 10:08:14

+0

你需要循环结果吗? – 2010-11-03 10:09:15

回答

6

尝试

while($weapons = mysql_fetch_array($weapons_query)){ 
    print_r($weapons); 
} 

,你需要这样一个循环来看看的所有行。

+1

正在发布相同的代码!它正在按照你所说的去做;作为数组检索第一行 http://php.net/manual/en/function.mysql-fetch-array.php – Polsonby 2010-11-03 10:06:06

+0

对。 'mysql_fetch_array()'将__ row_作为一个数组。 – 2010-11-03 10:07:28

+0

非常感谢您的快速回复。我无法相信我从来不知道这一点。你有我的不朽的感激之情。 – 2010-11-03 10:13:54

2

您只提取一行结果。您可以通过需要循环并收集所有的结果:

while(false !== ($row = mysql_fetch_array($weapons_query))) { 
    $weapons[] = $row; 
} 

var_dump($weapons); 

mysql_fetch_array只取一行结果的时间,如图所示的文件中。这意味着,例如,您可以处理需要更多内存的结果集,而不是允许您的脚本。

+0

-1为复杂的方式! while(false!==(...))与while(...)相同 – Tokk 2010-11-04 22:59:30

+0

@Tokk不,它不是! 'while(...)'相当于while(false!=(...))',这意味着不同的东西。做'var_dump(false == array());'看到这个在行动。我同意这种保护措施不是必要的,但类型安全是一个很好的习惯。 – lonesomeday 2010-11-04 23:16:37

1

mysql_fetch_array只返回一行。你想保持取数组,直到你有所有的行:

$weapons_sql = "SELECT weapon_id, weapon_name, weapon_strength FROM Weapon_Info WHERE weapon_id BETWEEN 1 AND 5"; 
$weapons_query = mysql_query($weapons_sql); 
$weapons = array(); 
while ($weapon = mysql_fetch_array($weapons_query)) 
{ 
    $weapons[] = $weapon; 
} 
print_r($weapons); 
+0

非常感谢您的快速回复。我不能相信我从来不知道这一点。你有我的不朽的感激之情。 – 2010-11-03 10:14:43