gpt4 book ai didi

php - 从 PHP 数组编写 PDO 搜索查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:42:52 24 4
gpt4 key购买 nike

我正在使用 PHP 7 和与 MySQL 数据库的 PDO 连接构建应用程序。

应用程序的一部分包含一个搜索表单,允许用户通过 3 个不同的字段搜索培训类(class):类(class)类别、类(class)名称和日期。

表单上的元素类型有:

  1. 类(class)类别 - 下拉列表,带有数字 (int) ID。
  2. 类(class)名称 - 文本输入
  3. 日期 - 日期选择器(使用 HTML 5 type="date" 参数在浏览器中获取日历)。

这些字段可以结合使用,也可以单独使用。这意味着用户可以搜索,例如,仅搜索 (1),或 (2 & 3),或全部 (1 & 2 & 3)。

我已经编写了 PHP 来获取 POST 数据,它现在位于一个数组中 - 例如:

$search_data = [
'category' => 3,
'name' => 'Hazard training',
'date' => ''
]

我想在 PDO 查询中使用它,但我不知道最好的写法是什么,因为 (1) 和 (3) 将是 = 查询条件,而 ( 2) 是一个LIKE。我的解决方案是循环搜索词,然后尝试构建查询,例如

$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 中绑定(bind)参数。它也不起作用,因为我找不到在每个查询之间获取 AND 的方法(如果有前面的语句)。

我现在迷茫了,不确定最好的写法是什么。

如有任何帮助,我们将不胜感激。

编辑:我意识到对名称进行硬编码,例如($key == 'course_name') 并不理想,但这只是因为查询条件不同(LIKE vs =).我假设可以使 $search_data 多维来说明它是哪种类型的查询,但这超出了我最初的问题,可能还有另一篇文章。

最佳答案

这里有一个简单的解决方案:

$sql = 'SELECT ..... FROM ... WHERE 1 ';
$where = '';
$pdoData = [];

foreach ($search_data as $key => $value) {
if(!$value) continue; // skip empty values

if ($key === 'category') {
$pdoData[':category'] = $value;
$where .= ' AND category = :category ';
}
if ($key === 'course_name') {
$pdoData[':course_name'] = '%'.$value.'%';
$where .= ' AND course_name LIKE (:course_name) ';
}
if ($key === 'date') {
$pdoData[':date'] = $value;
$where .= ' AND date = :date ';
}
}

$sql = $sql.$where;

$stmt = $this->ci->db->prepare($sql);
$stmt->execute($pdoData);
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);

并且您有保存绑定(bind)数据的$pdoDate 数组。

关于php - 从 PHP 数组编写 PDO 搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com