【问题标题】:Mysql - PHP different values searchesMysql - PHP 不同的值搜索
【发布时间】:2012-05-02 03:02:13
【问题描述】:

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

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

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

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

谢谢!

罗伯托

【问题讨论】:

    标签: php mysql search variables


    【解决方案1】:

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

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

      SELECT *
      FROM db
      $variable;
      

      不会看到WHERE 子句,除非它传递了您的值(这意味着您可以使用相同的查询对数据库进行一般搜索),而不必担心$variable 是空的/必需的。

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

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

      编辑:

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

      【讨论】:

      • 是的,我明白了……很好的解释。!我会试试这个。。谢谢。!
      【解决方案3】:

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

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

      【讨论】:

      • 这段代码看起来很有趣……我会按照你写的来试试。!非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多