【发布时间】:2019-03-14 12:38:13
【问题描述】:
最近几天我一直在尝试,但我就是想不通。我有一个过滤器页面,用户可以在其中选择 start_date、end_date、client 和 payment_status。 Client 和 payment_status 都引用了主服务表。
我什至回显所有 $_POST 并获得正确的输入,但我的 SQL 查询没有产生任何结果。当我在我的数据库上运行相同的查询时,我得到了正确的结果。这些天过去了,我没有看到任何错误,或者我对自己的错误视而不见。
<?php
include "../controller/session.php";
include "../controller/pdo.php";
$submit = isset($_POST["filter-submit"]) ? $_POST["filter-submit"] : "";
$date_start = isset($_POST["date_start"]) ? $_POST["date_start"] : "";
$date_end = isset($_POST["date_end"]) ? $_POST["date_end"] : "";
$client = isset($_POST["client"]) ? $_POST["client"] : "";
$payed = isset($_POST["payed"]) ? $_POST["payed"] : "";
echo $date_start . "<br>" . $date_end . "<br>" . $client . "<br>" . $payed . "<br>";
if ($submit == "Filter") {
$query = $db->prepare("SELECT * from service where(date BETWEEN ':date_start'AND ':date_end') AND clientId=:client AND paying_status=:payed;");
$query->bindParam(':date_start', $date_start);
$query->bindParam(':date_end', $date_end);
$query->bindParam(':client', $client);
$query->bindParam(':payed', $payed);
$results = $query->fetchAll(PDO::FETCH_OBJ);
var_dump($results);
}
2019-01-01
2019-07-03
1
1
数组(0){}
上面是 $_POST 输入和空数组。我不知道在哪里看。
编辑: SELECT * from service where(date BETWEEN '2019-01-01'AND '2019-07-03') AND clientId=1 AND payment_status=1; 这在我的数据库上运行良好。
编辑 2:更新代码。还是不行。
if ($submit == "Filter") {
$query = $db->prepare("SELECT * from service where(date BETWEEN ':date_start'AND ':date_end') AND clientId=:client AND paying_status=:payed;");
$query->bindParam(':date_start', $date_start);
$query->bindParam(':date_end', $date_end);
$query->bindParam(':client', $client, PDO::PARAM_INT);
$query->bindParam(':payed', $payed, PDO::PARAM_INT);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_OBJ);
var_dump($results);
}
编辑 3:
if ($submit == "Filter") {
$query = $db->prepare("SELECT * from service where(date BETWEEN :date_start AND :date_end) AND clientId=:client AND paying_status=:payed;");
$query->bindParam(':date_start', $date_start);
$query->bindParam(':date_end', $date_end);
$query->bindParam(':client', $client, PDO::PARAM_INT);
$query->bindParam(':payed', $payed, PDO::PARAM_INT);
$query->execute();
$results = $query->fetchAll(PDO::FETCH_OBJ);
var_dump($results);
}
这行得通!有人可以解释为什么我有时需要执行查询,有时我只能使用 fetchAll 获取数据或只是获取数据?我什么时候需要执行,什么时候可以获取?谢谢
【问题讨论】:
-
你能显示你对数据库执行的查询吗? (显示结果)
-
不是缺少$query->execute() 吗?
-
@FatFreddy 说了什么^,您应该将
PDO::PARAM_INT添加到$client和$payed作为->bindParam的第三个参数。您可能不需要在:date_start和:date_end周围加上''引号,PDO 会自动引用它们,因为它们的类型为PDO::PARAM_STR。 -
当我添加 PDO::PARAM_INT - 同样发生。当我在下面添加 $query-execute(); - 我收到此错误:致命错误:未捕获的 PDOException:SQLSTATE[HY093]:无效参数编号:绑定变量的数量与...中的标记数量不匹配
-
@svrdoljak 你能展示你更新的代码吗? (在上述所有更改的最佳情况下)