【发布时间】:2017-03-24 09:15:36
【问题描述】:
我正在使用 PHP 7 和一个到 MySQL 数据库的 PDO 连接构建一个应用程序。
应用程序的一部分包含一个搜索表单,允许用户通过 3 个不同的字段搜索培训课程:课程类别、课程名称和日期。
表单上的元素类型有:
- 课程类别 - 下拉列表,带有数字 (int) ID。
- 课程名称 - 文本输入
- 日期 - 日期选择器(使用 HTML 5
type="date"参数在浏览器中获取日历)。
这些字段可以结合使用,也可以单独使用。这意味着用户可以搜索,例如,仅按 (1)、或 (2 & 3) 或全部 (1 & 2 & 3)。
我已经编写了 PHP 来获取 POST 数据,它现在在一个数组中 - 例如:
$search_data = [
'category' => 3,
'name' => 'Hazard training',
'date' => ''
]
我想在 PDO 查询中使用它,但我不知道编写它的最佳方式是什么,因为 (1) 和 (3) 将是 = 查询条件,而 (2) 是 @ 987654324@。我的解决方案是遍历搜索词,然后尝试构建查询,例如
$sql = ' WHERE ';
foreach ($search_data as $key => $value) {
if ($key == 'category') {
$sql .= ' category = ' . $value;
}
if ($key == 'course_name') {
$sql .= ' course_name LIKE % ' . $value ' % ';
}
if ($key == 'date') {
$sql .= ' date = ' . $value;
}
}
这样做的问题是它不起作用,因为必须在 PDO 中绑定参数。它也不起作用,因为我找不到在每个查询之间获取AND 的方法(如果有前面的语句)。
我现在迷失了,不确定写这个的最佳方式是什么。
任何帮助将不胜感激。
编辑:我意识到硬编码名称,例如($key == 'course_name') 并不理想,但这只是因为查询条件不同(LIKE 与 =)。我假设可以使$search_data 多维来说明它是哪种类型的查询,但这超出了我最初的问题,可能是另一篇文章。
【问题讨论】: