PHP-POSTGRES使用PHP变量查询日期(年、月)


PHP-POSTGRES query date(year,month) with php variables

我有下面的表"约会"。

任命
id | app_date(date(| app_price(integer(
2013年8月1日|45
2 | 2012-07-01 | 30
2013年8月3日|50
。。。。

我创建了两个下拉选项,一个用于年份(例如2011年、2012年、2013年…(,另一个用于月份(1月、2月…(。如果用户选择"一月",则查询值为"01",二月为"02"。。。。12月是"12"。我希望用户在选择年份和月份后"提交",然后收到预约结果。

我写了下面的代码。

$year=$_GET['year']; //e.g. 2013
$month=$_GET['month']; //e.g. 08
if ($_GET['stat']==true) {
$con = pg_connect("host=localhost dbname=appdb user=postgres password=111")
or die('Could not connect: ' . pg_last_error());  
$query="select app_date, app_price
from appointment
where TO_CHAR(app_date, 'YYYY')='$year' AND TO_CHAR(app_date, 'MM')='$month' ";
$result=pg_query($query);
echo "<table align='center' width='20%' border='1'>
<th>".$month."</th>";
while ($row=pg_fetch_array($result))
 {   
$sum=$sum+$row['app_price'];
$sum_app=$sum_app+1;
}
echo "<tr><td>TOTAL APPOINTMENTS:</td><td>".$sum_app."</td><tr>
<tr><td>TOTAL PRICE:</td><td>".$sum."</td><tr>";
}
?>

在我提交后,我没有得到任何结果。我认为变量$year='2013'和$month='08'不是与"date"数据类型相等的正确值类型。我应该如何扳平比分?

提前谢谢大家。

如果在字段app_date上有索引,它将被忽略,整个表将被扫描。更好的例子是使用比较运算符,如BETWEEN:

$dt = new DateTime("$year-$month-1");
$sql = "
    SELECT app_date, app_price
    FROM appointment
    WHERE app_date BETWEEN '{$dt->format('Y-m-d')}' AND '{$dt->format('Y-m-t')}'
";

演示