javascript - While 循环内的 SQL 查询无法使用 PHP 和 JS 运行

标签 javascript php mysql sql

我想做的事情很简单。我有一个用于冰淇淋销售的 MySQL 数据库表,名为“ice_cream_sales”。表中的列是冰淇淋的“ flavor ”和“日期时间”时间戳。我想显示每年每种口味的冰淇淋销量。因此,我有一个 while 循环,它执行一个 SQL 查询,检索每年的行数,然后根据检索到的行的冰淇淋口味,将其添加到相应的 PHP 变量中,以便对该冰淇淋口味进行计数该冰淇淋当年的销量。然后我想使用一个使用 JS 数组的 Google 折线图来显示每年的冰淇淋销量。访问此链接了解其工作原理:https://google-developers.appspot.com/chart/interactive/docs/gallery/linechart

但是,现在我只想看看我可以成功地将 PHP 变量传输到 JS 变量,然后将这些变量添加到 JS 数组中。因此,我使用 echo 语句将 PHP 变量传输到 JS 变量,因为 PHP 代码嵌入在 JS 脚本标记中。然后,我使用每年每种 flavor 冰淇淋的这些计数器值创建一个数组,该数组将附加到用于 Google 折线图的数组中。当我尝试执行代码时,我得到一个空白页,没有错误消息。任何建议和修复将不胜感激。

当我注释掉 while 语句下的 if 语句代码块以检查冰淇淋的味道时,代码运行良好,我得到一个输出数组 [2010, 0, 0, 0], [2011, 0, 0, 0] 等等。

  <script>
      var toAdd = new Array();
      <?php

      $year = intval(2010);

      while ($year <= 2019) {
        include 'includes/dbh_cred.php';
        $sql = "SELECT * FROM ice_cream_sales WHERE myDate LIKE '$year%'";
        $chocolate = intval(0);
        $vanilla = intval(0);
        $strawberry = intval(0);
        $result = mysqli_query($connect, $sql);
       if (mysqli_rows($result) > 0) {
          while ($row = mysqli_fetch_assoc($result)) {
            if ($row['Flavor'] == 'Chocolate')
              $chocolate = $chocolate + 1;
            else if ($row['Flavor'] == 'Vanilla')
                $vanilla = $vanilla + 1;
            else  if ($row['Flavor'] == 'Strawberry')
                $strawberry = $strawberry + 1; 
              }
            }
          //chocolate, vanilla, strawberry sales for that particular year
              echo "var chocolate = " . $chocolate . ";";
              echo "var vanilla = " . $vanilla . ";";
              echo "var strawberry = " . $strawberry . ";";
              echo "var year = " . $year . ";";
              //add these values to an array
              echo "toAdd.push([year, chocolate, vanilla, strawberry]);";
              $year = $year +1;
          }

           ?>



        var data = new Array(["Year", "Chocolate", "Vanilla", "Strawberry"]);
        console.log(data[0][0] + "\t" + data[0][1] + "\t" + data[0][2] + "\t" 
                     + data[0][3]);
        data.push(toAdd);
          for(var i = 1; i < data.length; i++) {
            for(var j = 0; j < data[i].length; j++) {
        console.log(data[i][j]);

最佳答案

这可能会简单得多。

<?php
include 'includes/dbh_cred.php';
$sql = "SELECT
  YEAR(myDate) AS year,
  SUM(IF(Flavor = 'chocolate', 1, 0)) AS chocolate,
  SUM(IF(Flavor = 'strawberry', 1, 0)) AS strawberry,
  SUM(IF(Flavor = 'vanilla', 1, 0)) AS vanilla
FROM ice_cream_sales
GROUP BY YEAR(myDate)";
$result = $connect->query($sql);
if ($result->num_rows) {
    while ($row = mysqli_fetch_assoc($result)) {
        $data[] = $row;
    }
}
?>
<script>
var data = <?php echo json_encode($data);?>;
</script>

这是 SQL 的演示:http://sqlfiddle.com/#!9/f7ca1b/3/0 。基本上,它为每种口味维护一个计数器,然后按年份对其进行分组,因此所有数据都被编译为数据库查询的一部分。然后你需要在 PHP 中做的就是将记录放入数组中并以 JSON 格式输出。

我建议使用 PDO 进行数据库访问,因为它更容易学习并且会使代码更加简洁。

关于javascript - While 循环内的 SQL 查询无法使用 PHP 和 JS 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55543575/

相关文章:

php - 使用 php 在 strip 中创建托管帐户时如何提供外部帐户参数?

php - 使用 Zend_Form_Decorator_FormErrors 将 Zend_Form 错误定位在表单上方

php - 执行多个查询,然后查找返回值之间的匹配项

php - 如何在 PHP 中从 MySQL 数据库下载基于 blob 的文件?

javascript - 如何全局加载 quasar 框架

javascript - 在文本框上方添加div而不更改文本框的位置

javascript - 使用 XSS 改变服务器端已经存在的 javascript 文件

php - 在 collectionOperations (GET) 上使用 Symfony 选民

mysql - 更新时出现 Hibernate 多对多 ConstraintViolationException

javascript - 将正常日期转换为 unix 时间戳