使用准备好的语句 PHP 获取当月的 SQL table 数据

Get SQL table data for current month using prepared statement PHP

这是我用来从 table wp_formdata

获取当前月份数据的代码

HTML :

<div class="result" id="result" name="result">

            <?php echo $head1; ?> <?php echo $out; ?> <?php echo $head2; ?> 
</div>

PHP:

if ($_POST['result_options'] == 'Current_Month') {   

    $now = new \DateTime('now');
    $CurrMonth = $now->format('m');
    $CurrYear = $now->format('Y');

    $sql ="Select date,select_bank,entry_type,income_cat,expense_cat,amount,expense_cat_sub from wp_formdata WHERE MONTH(?) = MONTH(CURRENT_DATE()) AND YEAR(?) = YEAR(CURRENT_DATE()) order by date ";

    $stmt = mysqli_stmt_init($conn);
    if(!mysqli_stmt_prepare($stmt,$sql)) {
        $message =  '<h1 style="color:red;padding-top:5%;">SQL Error !!</h1>';

    } else {
        mysqli_stmt_bind_param($stmt,"ss", $CurrMonth, $CurrYear);
        mysqli_stmt_execute($stmt);
        $result= mysqli_stmt_get_result($stmt);
        $out = "";

        while($row = mysqli_fetch_assoc($result)) {
            $out .= "<tr><td>".$row["date"]."</td><td>".$row["select_bank"]."</td><td>".$row["entry_type"]."</td><td>".$row["income_cat"]."</td><td>".$row["expense_cat"]."</td><td>".$row["expense_cat_sub"]."</td><td>".$row["amount"]."</td></tr>";
        }
    }
}

我验证了数据库连接,它按预期工作。我还验证了变量 $CurrMonth$CurrYear 值:

echo $CurrMonth; //will give output 10 

echo $CurrYear;  //will give output 2018

但是我没有得到任何搜索结果。有什么建议可以解决吗?

您 SQL 中的月份和年份比较看起来不正确,您正在比较当前月份(并从中提取月份 MONTH(?))与当前日期的月份 (MONTH(CURRENT_DATE())).您可以在不使用任何参数的情况下逃脱,因为您需要比较(我假设)记录中的日期月份(MONTH(date))与当前月份(与年份相同)。

$sql ="Select date,select_bank,entry_type,income_cat,expense_cat,
                 amount,expense_cat_sub 
          from wp_formdata 
          WHERE MONTH(date) = MONTH(CURRENT_DATE()) 
                   AND YEAR(date) = YEAR(CURRENT_DATE()) 
          order by date ";

在 PHPMyAdmin 之类的东西中检查 SQL 总是值得的,以确保它在 运行 之前在 PHP.[=15= 中给出你之后的结果]

如果您需要为任何其他月份执行此操作,您可以使用参数,但不要从中提取月份...

$sql ="Select date,select_bank,entry_type,income_cat,expense_cat,
                 amount,expense_cat_sub 
          from wp_formdata 
          WHERE MONTH(date) = ?
                   AND YEAR(date) = ?
          order by date ";

您正在将 PHP 当前日期与数据库当前日期进行比较。

在您的 SQL 字符串中,您应该将 MONTH(?)YEAR(?) 替换为 MONTH(date)YEAR(date)。 此时你应该删除 mysqli_stmt_bind_param($stmt,"ss", $CurrMonth, $CurrYear); 因为 SQL 字符串没有参数。