PHP array_sum无法正常工作

时间:2011-12-19 15:29:55

标签: php mysql

我正在尝试查询SQL表,然后使用array_sum将一列中的所有值(它是“tinyint(1)”)添加起来然后打印。 (目前只有两行)。

当该行中的两行都有“1”时,它给出2,正确的答案。当它们都是“0”时,它给出0,再次正确。但是当一个是“1”而一个“0”时,它给出2而不是1。

这是我的代码

$con = mysql_connect("XXX","XXX","XXX");

if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("XXX_test", $con);

$day = $_GET["day"];

$query = mysql_query("SELECT $day FROM sites");

if (!$query)
  {
  die('Could not query: ' . mysql_error());
  }

$rows = mysql_fetch_array($query);

echo array_sum($rows);

mysql_close($con);
$con = mysql_connect("XXX","XXX","XXX"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("XXX_test", $con); $day = $_GET["day"]; $query = mysql_query("SELECT $day FROM sites"); if (!$query) { die('Could not query: ' . mysql_error()); } $rows = mysql_fetch_array($query); echo array_sum($rows); mysql_close($con);

感谢您的帮助。

- UPDATE -
我自己就解决了这个问题。

有了这个,如果你想知道:     $ query = mysql_query(“SELECT name,SUM($ day)AS Alerts FROM sites”);

?>

5 个答案:

答案 0 :(得分:4)

这实际上从不正常工作。

$rows = mysql_fetch_array($query);

该行只获取第一行。永远不会检索第二行。

2 array_sum使用mysql_fetch_array的原因是array( 0 => '1', 'Tuesday' => '1' ) 以两种不同的格式获得结果,其中包含名称和数字的键。所以你会得到这样的东西:

2

显然,这将始终为0SELECT COUNT(*) FROM sites WHERE $day=1

您几乎肯定会对数据库服务器进行计数:

{{1}}

但是,请注意,当前最大的问题是SQL注入漏洞的巨大差距。消除你的意见。

答案 1 :(得分:3)

mysql_fetch_array()一次只能获取一行。您需要在while循环中获取行。然后,您可以将结果附加到数组并对它们求和,或者在循环中对它们求和。你也可以在mysql中SUM,所以你可以考虑使用它。

我还有义务建议您使用PDO或其他DB包装器而不是mysql_。在大多数情况下,您还需要转义在查询中使用的变量,特别是如果它们来自_GET

答案 2 :(得分:2)

我建议在mysql查询中执行此操作:

SELECT SUM($day) FROM sites

另外,请转义$ day变量。

答案 3 :(得分:1)

更多评论:

array_sum无法使用您传递给它的数组。您需要为函数实际工作的内容传递一个数组,例如array(1, 2, 3),它将为您提供6

接下来,让MySQL自己计算SUM(或COUNT?),这样你的脚本就像其他人发布的那样更容易处理。

答案 4 :(得分:0)

我自己就解决了这个问题。

有了这个,如果你想知道:     $ query = mysql_query(" SELECT name,SUM($ day)AS Alerts FROM sites");

while($row = mysql_fetch_array($query))
  {
  echo $row['Alerts'];
  echo "<br />";
  }
相关问题