【发布时间】:2023-04-07 20:53:01
【问题描述】:
我有一个应用程序可以显示数据库表中的文件列表。我希望用户能够通过选择将过滤文件列表并仅显示匹配的选项来创建组。组选项被添加到另一个表以供以后使用。
以下是选项:
nameyeartyperoomdaytime
除了name 之外,所有这些都是可选的,用户可以留空。一些选项可以包含多个由, 分隔的值。
这是我添加此信息的代码:
if ($addGrp = $m->prepare("SELECT * FROM pro_files WHERE userid=?, name=? ...")) {
$addGrp->bind_param('is ...',$userid, $name ...;
}
作为参考,选择我将使用的这些动态列:
WHERE room in (g23,f43,g43) AND type in ('pptx,ppt,ai,pdf')
并且用于绑定它们的变量是逗号分隔的值(根据用户选择的内容生成,如果用户什么都不选择,则该变量将不存在):
$room = 'g23,f43,g43';
$type = 'pptx,ppt,ai,pdf';
使用旧的 MYSQL 方法,我可以创建一个查询字符串,没有问题。当我还需要处理 bind_param 行时,如何创建动态查询?
为了演示,我在需要动态生成查询的地方添加了...。
由于应用程序的其余部分当前正在使用 MYSQLi,因此我无法使用 PDO,这项工作太棒了。
另外,是否可以在 IN 子句中使用通配符?在这种情况下,我可以在 PHP 中创建'' = '*'。但是room in ('*') 不起作用。
【问题讨论】:
-
您应该考虑一个框架或 ORM 已经涵盖了此类用例。