PHP PDO foreach变量

时间:2014-04-29 19:13:03

标签: php pdo

我目前正在开发一个PHP脚本,它使用pdo来访问数据库表。它只是试图弄清楚这最后的事情。我仍然是相对较新的PHP,可能可以通过环顾四周找出自己,我只是不知道该寻找什么。

我会告诉你我拥有的东西,我有一张叫做服务器的桌子。它有一个名为location的列(USA,CANADA,MEXICO和EU是每行中的值)。然后,每个位置的另一个表对应于服务器表(美国,加拿大,墨西哥和欧盟)。然后在每个表中,该位置有一个名为SLOTS的列,说第一行有2,第二行有3,等等。我想得到所有这些的总和,然后把它放到一个变量中,然后每个都是显示在同一页面上。我现在的工作正常,但我希望在添加更多位置时拥有它我不必返回并添加它,它将从服务器表中的位置列获取它,并使其更清洁那就是。我正在研究变量变量,但不确定它是否有效或如何在这种情况下使其工作?

我有什么

$usaresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM USA");
$usarow = $usaresult->fetch(PDO::FETCH_ASSOC);
$usaslots = $usarow['value_sum'];
if(!isset($usarow['value_sum'])) {
    $usaslots = '0';
}

$canadaresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM CANADA");
$canadarow = $canadaresult->fetch(PDO::FETCH_ASSOC);
$canadaslots = $canadarow['value_sum'];
if(!isset($canadarow['value_sum'])) {
    $canadaslots = '0';
}

$mexicoresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM MEXICO");
$mexicorow = $mexicoresult->fetch(PDO::FETCH_ASSOC);
$mexicoslots = $mexicorow['value_sum'];
if(!isset($mexicorow['value_sum'])) {
    $mexicoslots = '0';
}

$euresult = $db->query("SELECT SUM(SLOTS) AS value_sum FROM EU");
$eurow = $euresult->fetch(PDO::FETCH_ASSOC);
$euslots = $eurow['value_sum'];
if(!isset($eurow['value_sum'])) {
    $euslots = '0';
}

这是我想到的,不起作用,可能完全关闭,可能会做得更好,但我想应该知道我在寻找什么?

$query = "SELECT * FROM servers";

try 
{ 
    $stmt = $db->prepare($query); 
    $stmt->execute();
    $result = $stmt->fetchAll();
}

catch(PDOException $ex) 
{ 
    die("Failed to run query: " . $ex->getMessage()); 
}

foreach ($result as $row) {
    ${$row['location']}result = $db->query("SELECT SUM(SLOTS) AS value_sum FROM $row['location']");
    ${$row['location']}row = ${$row['location']}result->fetch(PDO::FETCH_ASSOC);
    ${$row['location']}slots = ${$row['location']}row['value_sum'];
    if(!isset(${$row['location']}row['value_sum'])) {
    ${$row['location']}slots = '0';
    }
}

如果有人能帮助我,或者指出我正确的方向,那就太好了。如果有人能够,请提前致谢。

1 个答案:

答案 0 :(得分:0)

为什么没有一个表用于所有服务器,例如像这样

CREATE TABLE `servers` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `location` varchar(255) NOT NULL,
  `slots` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) 

然后像这样查询

SELECT location, slots from servers group by location 

这将整齐地总结每个位置的插槽,每个位置可以有多个行,您可以随意添加位置而无需添加表