gpt4 book ai didi

php - 如何将变量输入到准备好的 stmt 中以从列中检索所有内容?

转载 作者:行者123 更新时间:2023-11-29 15:40:19 26 4
gpt4 key购买 nike

我正在我的事件网站上创建搜索过滤器。有 3 个下拉输入:位置、事件类型、日期。

当用户提交搜索过滤器时,表单会发布更改 mysql 查询的值,这将在用户屏幕上显示不同的事件。我无法找到灵活的解决方案。

现在我的查询是这样的:

$filter = $database->prepared_query("SELECT * FROM onlineevent WHERE event_location = (?) AND event_type = (?) AND event_date = (?)", array($l, $t, $d));  

如何让 $l 检索 event_location 的所有可能值? $t 和 $d 也是如此。我以为我可以将 $l 设置为“*”,但这不起作用。

现在的问题是,如果用户没有为 $l 选择值,但为 $t 和 $d 选择了值,则查询将不起作用。我想为每个变量设置默认值,以带来每个条件的所有结果。

因此,如果用户未选择任何过滤器并提交表单,我正在查找的查询将如下所示:

$filter = $database->prepared_query("SELECT * FROM onlineevent WHERE event_location = (?) AND event_type = (?) AND event_date = (?)", array(ALL, ALL, ALL));  

最佳答案

原始版本Ali_k's answer几乎是正确的,但错误地将整个子句作为参数,而不仅仅是值。这将导致整个子句被视为字符串值,而不是包含其中值的代码。

逐步构建字符串的想法 - 并且最重要的是,仅在搜索参数中实际指定了值时才添加子句 - 是正确的。您还需要以相同的速率单独构建参数数组。

这是一个实际上应该正确执行的版本:

$sql = "SELECT * FROM onlineevent";
$sqlfilters = "";
$parameters = array();

if( !empty($l) ){
$sqlfilters .= " event_location = ?";
$parameters[] = $l;
}
if( !empty($t) ){
$sqlfilters .= ($sqlfilters != "" ? " AND" : "")." event_type = ?";
$parameters[] = $t;
}
if( !empty($d) ){
$sqlfilters .= ($sqlfilters != "" ? " AND" : "")." event_date = ?";
$parameters[] = $d;
}

if ($sqlfilters != "") sqlfilters = "WHERE ".$sqlfilters; //add a WHERE clause if needed
$sql .= $sqlfilters; //add the filters to the initial SQL

$filter = $database->prepared_query($sql, $parameters);

关于php - 如何将变量输入到准备好的 stmt 中以从列中检索所有内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57743352/

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