我正在尝试查询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”);
?>
答案 0 :(得分:4)
这实际上从不正常工作。
$rows = mysql_fetch_array($query);
该行只获取第一行。永远不会检索第二行。
2
array_sum
使用mysql_fetch_array
的原因是array(
0 => '1',
'Tuesday' => '1'
)
以两种不同的格式获得结果,其中包含名称和数字的键。所以你会得到这样的东西:
2
显然,这将始终为0
或SELECT 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 />";
}