【问题标题】:mysql, building long sql queries from form data. (php)mysql,从表单数据构建长 sql 查询。 (php)
【发布时间】:2011-08-28 06:03:16
【问题描述】:

我正在编写一个基于从包含搜索参数的提交表单中获得的信息的大型 sql 查询。我只是想知道是否有人对这样做的最佳方式有任何建议。我计划创建一个 if else 语句列表,并根据用户输入搜索表单的数据构建一个长搜索字符串。

有没有更好的方法来做到这一点?有什么推荐的网站或教程吗?

谢谢。

【问题讨论】:

  • 最终目标是什么?我不确定您要达到的目标。 (顺便说一句:是的,您确实需要担心 sql 注入:#1 受信任的用户不是,而 #2 非恶意错字可能会破坏您的应用程序)
  • 已注意到,已进行更改。我正在构建一个动态搜索查询。

标签: php mysql parameter-passing optional-parameters


【解决方案1】:

首先我会使用prepared statement,因为没有理由不这样做,而且我从不相信用户输入。

如果您的变量在数组或对象中,我会遍历它并添加变量和值(如果它在$_POST 数组中设置)。请注意,我正在循环遍历我的数组或对象 - 而不是 $_POST - 这基本上是一个白名单。

您可能需要对已更改但未设置的复选框进行一些额外检查,因为它们不会出现在 $_POST 数组中。

【讨论】:

  • 在处理所有特殊情况时,官方的“准备好的声明”在这里有点过头了。 “mysql_real_escape_string”在我的情况下有效。
  • @Ray L. 我不同意,使用像 PDO 这样的数据访问抽象层和准备好的语句只是 php 演变的一部分。真的没有理由不使用它,因为您可以像使用经典的 mysql 函数一样做同样的事情,而且它没有更多的工作。它确实为您提供自动安全性(不再是 mysql_real_escape_string)、选择或更改基础数据库的灵活性以及错误处理的灵活性。
【解决方案2】:

您仍然需要担心意外的 SQL 注入。不要跳过转义用户输入。

至于实际构建查询本身:使用 php 的控制结构连接一系列查询部分并不少见,但很多人发现像 the Zend Framework 这样的工具非常方便。

【讨论】:

    【解决方案3】:

    信任但检查。很简单,转义所有传入的参数。

    mysql_real_escape_string

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 2010-11-06
      • 2015-09-07
      • 2015-11-07
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2011-06-22
      相关资源
      最近更新 更多