首页 > 解决方案 > PHP从Mysql Query返回空值

问题描述

我使用相同的查询返回两个日期之间的一个整数值,它是列的总和

SQL查询:

SELECT SUM(TransactionAmount) FROM `sales` WHERE TransactionTime BETWEEN '2020-12-15' AND '2020-12-16' 

在这个 PHP 代码中:

<?php
require 'config/db.php';

if(isset($_POST["searchinDate-btn"])){
$start_date = $_POST['startdate'];
$end_date = $_POST['enddate'];

$totalRev = "SELECT SUM(TransactionAmount) FROM `sales` WHERE TransactionTime BETWEEN '$start_date' AND '$end_date'";

$totalRevQ = mysqli_query($conn, $totalRev);

    $rev = mysqli_fetch_assoc($totalRevQ);

      $revenue = $rev[0]; 

 }

?>

(附加)HTML代码:

<form action="Dashboard.php" method="POST">
      <div class="dateselect"> 
        <label for="start-date">Start Date: </label>
          <input type="date" id="start-date" name="startdate" value="">
        <label for="start-date"> - - End Date: </label>
          <input type="date" id="end-date" name="enddate" value="">
          <button  style="margin-bottom: 3px;" type="submit" name="searchinDate-btn" class="mbtn btn btn-primary">Show</button>  
      </div>
</form>
<p> <?php echo $revenue; ?> </p>

可变收入由于某种原因没有任何回报!注意:开始日期和结束日期以及查询结果实际上都会返回结果,但我认为显示查询结果存在问题,查询结果将是一个整数值,如 562 或其他值!(我需要行号 0 的值而不是行数)

更新:错误是从 PHP 传递日期类型以将其与数据库中的时间戳字段类型进行比较。

将日期转换为时间戳我使用这个 PHP 代码:

<?php
    require 'config/db.php';
    
    if(isset($_POST["searchinDate-btn"])){
    $start_date = $_POST['startdate'];
    $StartDate = date("Y-m-d H:i:s", strtotime($start_date));
    $end_date = $_POST['enddate'];
    $EndDate = date("Y-m-d H:i:s", strtotime($end_date + '24 hours'));
    
    $totalRev = "SELECT SUM(TransactionAmount) AS Revenue FROM `sales` WHERE TransactionTime BETWEEN '$StartDate' AND '$EndDate'";
    
    $totalRevQ = mysqli_query($conn, $totalRev);
    
    $rev = mysqli_fetch_assoc($totalRevQ);
    
    $revenue = $rev['Revenue'];
    
    }
    ?>

标签: phpmysqlmysqli

解决方案


也许在查询的总和中添加一个别名:

$totalRev = "SELECT SUM(TransactionAmount) AS totalAmount FROM `sales` WHERE TransactionTime BETWEEN '$start_date' AND '$end_date'";

然后更改$rev = mysqli_fetch_assoc($totalRevQ)$rev = mysqli_fetch_array($totalRevQ), 以获取$revenue = $rev["totalAmount"]:D的值

此外,正如 Strawberry 所说,不要忘记保护该查询免受 SQL 注入,相信用户输入从来都不是一件好事!


推荐阅读