我知道如何使用例如 WHERE 词来执行 mysql 搜索。但我的问题是我需要搜索不同的值,但这些值的数量可能会有所不同。例如:
我可以搜索 3 个变量 Name、LastName、Age 但在其他搜索中,我可以查找 2 个变量 Name、Age。
有没有办法使用相同的脚本执行 MYSQL 搜索,无论我搜索多少值。??
“强制”搜索固定数量的变量是一种更好的做法。??
谢谢。!
罗伯托
恕我直言,最好将搜索限制在固定数量的变量中。这样,您是出于特定原因回答特定问题,而不是试图为您的特定问题提供一般答案。限制搜索条件使语句更易于调试和性能基准测试。
希望这可以帮助。
只需为您的搜索参数使用一个变量并将其注入您的查询中。只需确保在函数/方法中将变量放入正确的格式(这将取决于您如何选择不同的值。)
SELECT *
FROM db
$variable;
不会WHERE
看到任何子句,除非它传递了您的值(这意味着您可以使用相同的查询来进行数据库的一般搜索),而不必担心会有一个 empty/required $variable
。
您$variable
在构建时需要在其中包含WHERE
子句,然后您添加的每个值,以正确的格式插入它(也许在循环中)。
希望这是有道理的,如果不让我知道,我会尽力澄清。这与大多数人在分页时使用的方法相同(除了他们将变量放在LIMIT
而不是WHERE
)
编辑:
还要确保在注入前正确清理变量。
动态构建查询的简单示例:
$conditions = array();
if (...) {
$conditions['age'] = $age;
}
if (...) {
$conditions['name'] = $name;
}
...
if (!$conditions) {
die('No conditions supplied');
}
// if you're still using the mysql_ functions and haven't done so before:
$conditions = array_map('mysql_real_escape_string', $conditions);
foreach ($conditions as $field => &$value) {
$value = "`$field` = '$value'";
}
$query = 'SELECT ... WHERE ' . join(' AND ', $conditions);
动态地将您想要创建的确切查询拼凑在一起并不难。请注意不要弄乱 SQL 语法或让自己面临更多注入漏洞。您可能想查看数据库抽象层,它几乎允许您将$conditions
数组传递给一个函数,该函数将从它构造实际查询,或多或少类似于上面的方式。