使用准备好的语句 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 字符串没有参数。
这是我用来从 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 字符串没有参数。