【问题标题】:Do I need to prepare statement even if I know the type of the parameters? [closed]即使我知道参数的类型,我是否需要准备语句? [关闭]
【发布时间】:2014-02-06 18:47:28
【问题描述】:

如果参数是整数并且不是来自用户输入,它是我设置的变量,如$type = 5;,我是否仍然需要为它创建一个占位符,就像我为来自用户输入的参数所做的那样( WHERE type = ?) ?有什么好处吗?

【问题讨论】:

标签: php sql pdo prepared-statement


【解决方案1】:

出于安全原因,尽可能进行参数化是个好主意,但您不必这样做。参数化查询更有可能从查询缓存的效果中受益,但您是否会看到性能优势取决于您的场景。

在某些情况下,您需要直接添加 SQL;例如,列名和表名不能参数化。只要仔细过滤这些,就可以了。

【讨论】:

    【解决方案2】:

    出于安全目的,我会使用准备好的语句。尽管参数不是直接来自用户输入,但有人可能会在其中注入有害代码。可能会破坏你的 sql 数据库

    【讨论】:

    • 嗯怎么样?如果可以更改代码,我认为准备语句不会有帮助:) 我认为这两种方式都一样安全,但我想知道除了安全性之外,准备语句是否还有其他优点,这没有在这种情况下很重要
    • 您能否 100% 保证该值永远不会依赖于用户输入?也许几个月后发生了变化,而您忘记了该值是直接在 sql 查询中设置的。另外,我会采用一种创建 sql 语句的方式,不要混淆。
    • @tea2code:如果数据库代码中的所有内容都没有受到污染,那很好。我同意参数化在可能的情况下更好的观点。
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 2014-09-03
    • 1970-01-01
    相关资源
    最近更新 更多