Php 循环及;MYSQL将$i var上的变量值相乘

Php 循环及;MYSQL将$i var上的变量值相乘,php,mysql,Php,Mysql,我试图创建vars$cdn_1到$cdn_30(一个月中的几天),并在php和mysql上为它们分配一个带有for循环的值。 var获取的值基于COUNT()类型的mysql查询。这里的问题是,例如var$cdn_6的值应该是4,但脚本会重复该值的次数。 当我打印$cdn_6时,值应该是4,输出是4444,如果mysql的检索值增加,情况也是如此,如果值应该是5,则实际显示55555。我真的不知道为什么会这样。我非常感谢你的帮助。谢谢 for ($i = 1; $i <= 30; $i++

我试图创建vars$cdn_1到$cdn_30(一个月中的几天),并在php和mysql上为它们分配一个带有for循环的值。 var获取的值基于COUNT()类型的mysql查询。这里的问题是,例如var$cdn_6的值应该是4,但脚本会重复该值的次数。 当我打印$cdn_6时,值应该是4,输出是4444,如果mysql的检索值增加,情况也是如此,如果值应该是5,则实际显示55555。我真的不知道为什么会这样。我非常感谢你的帮助。谢谢

for ($i = 1; $i <= 30; $i++) {
  $conalyfor=mysqli_connect($servername,$username,$password,$db);
  $queryalyfor = "SELECT COUNT(*) FROM `".$table_projects."` WHERE `day_id` = '".$i."' ";
  $resultalyfor = mysqli_query($conalyfor, $queryalyfor);
  while($row = mysqli_fetch_array($resultalyfor)) {

  $amount_day= $row["COUNT(*)"];

  };
  mysqli_close($conalyfor);

  $string = 'cnd_'.$i;
  extract(array($string => $string));
  $varrf = "cnd_".$i;
  $$varrf = $amount_day;
  $v2 = "cnd_".$i;

};

echo $cnd_6;
for($i=1;$i$string));
$varrf=“cnd_u1;”$i;
$$varrf=$amount\u day;
$v2=“cnd”..$i;
};
echo$cnd_6;

变量不适合此任务。您只需按照aynber的建议执行一个查询,然后将值放入一个以天数为键的数组中。然后可以使用键从数组中访问值

$results = $conalyfor->query('SELECT day_id, COUNT(*) FROM `'.$table_projects.'` GROUP BY day_id');
$days = [];
foreach($results as $row){
    $days[$row['day_id']] = $row['COUNT(*)'];
}

echo 'The count for day 6 is '.$days[6];

变量不适用于此任务。您只需按照aynber的建议执行一个查询,然后将值放入一个以天数为键的数组中。然后可以使用键从数组中访问值

$results = $conalyfor->query('SELECT day_id, COUNT(*) FROM `'.$table_projects.'` GROUP BY day_id');
$days = [];
foreach($results as $row){
    $days[$row['day_id']] = $row['COUNT(*)'];
}

echo 'The count for day 6 is '.$days[6];

通过首先创建一个空数组,然后使用1个查询来获得按
day\u id
分组的所有结果,您可以使这一过程变得容易得多:

$days = array_fill_keys(range(1,31), 0); // Creates an empty array with keys 1-31

$conalyfor=mysqli_connect($servername,$username,$password,$db);
$queryalyfor = "SELECT day_id, COUNT(*) as total FROM `".$table_projects."` GROUP BY `day_id` ";
$resultalyfor = mysqli_query($conalyfor, $queryalyfor);
while($row = mysqli_fetch_array($resultalyfor)) {

    $days[$row['day_id']] = $row['total'];

};

通过首先创建一个空数组,然后使用1个查询来获得按
day\u id
分组的所有结果,您可以使这一过程变得容易得多:

$days = array_fill_keys(range(1,31), 0); // Creates an empty array with keys 1-31

$conalyfor=mysqli_connect($servername,$username,$password,$db);
$queryalyfor = "SELECT day_id, COUNT(*) as total FROM `".$table_projects."` GROUP BY `day_id` ";
$resultalyfor = mysqli_query($conalyfor, $queryalyfor);
while($row = mysqli_fetch_array($resultalyfor)) {

    $days[$row['day_id']] = $row['total'];

};

为什么不创建一个值数组而不是使用变量名呢?那样你会遇到很多困惑。您还可以通过删除WHERE并使用
GROUP by day\u id
Hey@anyber来减少数据库调用的次数!谢谢你的回复。我没有完全理解你。请用您建议的代码发布一个答案好吗?警告:当使用
mysqli
时,您应该使用并向查询中添加任何数据。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何类型的数据直接放入查询中,如果有人试图利用您的错误进行攻击,这可能会非常有害。注意:这样会大大减少冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u query
接口混淆,因为缺少一个
i
可能会造成麻烦。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口很大程度上是PHP 4时代的产物,当时引入了
mysqli
API,不应该在新代码中使用。不清楚为什么表名是动态的,但如果这是因为每个客户端都有自己的表,这是关系数据库设计中的一个相当大的错误,可能会导致各种各样的混乱问题。为什么不创建一个值数组而不是使用变量名呢?那样你会遇到很多困惑。您还可以通过删除WHERE并使用
GROUP by day\u id
Hey@anyber来减少数据库调用的次数!谢谢你的回复。我没有完全理解你。请用您建议的代码发布一个答案好吗?警告:当使用
mysqli
时,您应该使用并向查询中添加任何数据。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。切勿将
$\u POST
$\u GET
或任何类型的数据直接放入查询中,如果有人试图利用您的错误进行攻击,这可能会非常有害。注意:这样会大大减少冗长,使代码更易于阅读和审核,并且不容易与过时的
mysql\u query
接口混淆,因为缺少一个
i
可能会造成麻烦。示例:
$db=new mysqli(…)
$db->prepare(“…”)
过程接口很大程度上是PHP 4时代的产物,当时引入了
mysqli
API,不应该在新代码中使用。不清楚为什么表名是动态的,但如果这是因为每个客户端都有自己的表,这是关系数据库设计中的一个相当大的错误,可能会导致各种各样的混乱问题。