这个想法是您在代码中使用条件逻辑来根据需要收集与您的应用程序输入相对应的术语。然后,以产生正确的SQL表达式的方式将它们连接在一起。
它确实需要一些应用程序功能来动态构建SQL表达式,并且有一些技巧可以使其尽可能简洁。如果确实有很多可能的搜索词,则可能会得到冗长的功能。但猜猜怎么了?如果您有复杂的输入,则需要复杂的代码来处理它们就不足为奇了。
发表您的评论:
url.com?location=gb&color=3&hair=4
好的,您最多有三个输入,并且您必须根据这些输入动态构建一个SQL查询。让我们从头开始,然后倒退。最终,您需要这样的SQL表达式:
WHERe (location = 'gb') AND (color = 3) AND (hair = 4)
如果您有一个包含三个术语的数组,则可以使用
implode()函数在PHP中将它们连接在一起。但是您可能也少于三个。您可以通过将数组中包含的多个术语放入
AND每个术语之间来处理它们,从而处理任意数量的术语:
$where_array = array( "(location = 'gb')", "(color = 3)", "(hair = 4)" );$where_expr = "WHERe " . implode(" AND ", $where_array);那么如何使用这些术语创建数组?通过为应用程序当前请求中存在的每个输入编写有条件地附加到数组的代码,请执行以下操作:
$where_array = array();if (array_key_exists("location", $_GET)) { $location = mysql_real_escape_string($_GET["location"]); $where_array[] = "(location = '$location')";}if (array_key_exists("color", $_GET)) { $color = mysql_real_escape_string($_GET["color"]); $where_array[] = "(color = '$color')";}if (array_key_exists("hair" $_GET)) { $hair = mysql_real_escape_string($_GET["hair"]); $where_array[] = "(hair = '$hair')";}完成所有这些之后,您的数组将包含零到三个元素。如果它具有一个或多个,则要生成一个
WHERe如前所示的子句,否则请跳过它。
$where_expr = '';if ($where_array) { $where_expr = "WHERe " . implode(" AND ", $where_array);}然后将追加
$where_expr到您的基准SQL查询中。
$sql .= $where_expr
有关的内容
$params是查询参数,这是将动态值包含在SQL表达式中的替代方法,而不是
mysql_real_escape_string()。它不是强制性的(事实上,PHP的旧mysql扩展不支持查询参数),但是我建议切换到PDO,以便可以使用此功能。请参阅此处的示例:
PDO::prepare()。



