"SELECT $ var FROM ..."中的变量,这是安全的还是对sql注入开放?

Mik*_*Cxt 1 php sql-injection

我一直在学习准备好的语句和绑定参数......我曾希望能够做到这一点:

SELECT ? FROM table WHERE id=?
Run Code Online (Sandbox Code Playgroud)

但是,我发现你不能使用绑定参数来调用这里搜索的表或列.在这里搜索之后,我理解为什么现在背后的原因.

这让我有了这个问题.使用这样的变量是否安全:

$fields = "col1, col2, col3";  
SELECT $fields FROM table WHERE id=?
Run Code Online (Sandbox Code Playgroud)

我问,因为我有一个很大的声明,并且能够使语句简短并使用$fields包含非常长的字符串是很好的.我可以使用select all,除了我然后存储然后绑定结果(不确定它是否真的必要......我还没有尝试使用$stmt->get_result(),只是升级的php才能够使用它昨天).

我对SQL注入的工作方式有一个大概的了解,从我一直在做的所有阅读中看来,准备和参数化语句的想法是它通过让SQL不运行整个语句来阻止SQL注入,但是将它分解为简单地说......

然而,当我放入$fields变量时,现在是否在语句中直接使用变量将它打开到SQL注入? $fields是硬编码的,不是来自代码本身以外的任何来源(不是来自用户,不来自数据库).我不知道SQL注入可以攻击的程度,这就是我在这里问的原因.我可以处理一个冗长的陈述,但这将有助于我理解正确的方法,并使其更安全.

谢谢.

col*_*ton 5

$ fields是硬编码的,不是来自任何来源

这意味着您根本不必担心注射.即使你在声明的任何其他地方使用它.

你当然应该小心,不要让它在以后"公开"!