0

我知道如何使用例如 WHERE 词来执行 mysql 搜索。但我的问题是我需要搜索不同的值,但这些值的数量可能会有所不同。例如:

我可以搜索 3 个变量 Name、LastName、Age 但在其他搜索中,我可以查找 2 个变量 Name、Age。

有没有办法使用相同的脚本执行 MYSQL 搜索,无论我搜索多少值。??

“强制”搜索固定数量的变量是一种更好的做法。??

谢谢。!

罗伯托

4

3 回答 3

0

恕我直言,最好将搜索限制在固定数量的变量中。这样,您是出于特定原因回答特定问题,而不是试图为您的特定问题提供一般答案。限制搜索条件使语句更易于调试和性能基准测试。

希望这可以帮助。

于 2012-05-02T03:07:56.567 回答
0

只需为您的搜索参数使用一个变量并将其注入您的查询中。只需确保在函数/方法中将变量放入正确的格式(这将取决于您如何选择不同的值。)

SELECT *
FROM db
$variable;

不会WHERE看到任何子句,除非它传递了您的值(这意味着您可以使用相同的查询来进行数据库的一般搜索),而不必担心会有一个 empty/required $variable

$variable在构建时需要在其中包含WHERE子句,然后您添加的每个值,以正确的格式插入它(也许在循环中)。

希望这是有道理的,如果不让我知道,我会尽力澄清。这与大多数人在分页时使用的方法相同(除了他们将变量放在LIMIT而不是WHERE

编辑:

还要确保在注入前正确清理变量。

于 2012-05-02T03:08:28.840 回答
0

动态构建查询的简单示例:

$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数组传递给一个函数,该函数将从它构造实际查询,或多或少类似于上面的方式。

于 2012-05-02T03:09:37.757 回答