我一直在学习预备语句和绑定参数......我原本希望能够做到这一点:
SELECT ? FROM table WHERE id=?
但是,我发现你不能使用绑定参数来调用这里搜索的表或列。在此处搜索之后,我也明白了为什么背后的原因。
这让我有了这个问题。使用这样的变量是否安全:
$fields = "col1, col2, col3";
SELECT $fields FROM table WHERE id=?
我问,因为我有一个大的语句,并且能够使语句简短并使用包含非常长字符串的$fields
是很好的。我可以使用select all,除了我然后存储然后绑定结果(不确定它是否真的必要......我还没有尝试使用$stmt->get_result()
,只是升级了php才能够昨天使用它。)
我对SQL注入的工作方式有一个大概的了解,从我一直在做的所有阅读中看来,准备和参数化语句的想法是它通过让SQL不运行整个语句来阻止SQL注入,但是中断除此之外简单地说......
然而,当我放入$fields
变量时,是否将它打开备份到SQL注入,因为我在语句中直接有变量? $fields
是硬编码的,不是来自代码本身以外的任何来源(不是来自用户,不来自数据库)。我不知道SQL注入可以攻击的程度,这就是我在这里问的原因。我可以处理一个冗长的陈述,但这将有助于我理解正确的方法,并使其更安全。
谢谢。
答案 0 :(得分:5)
$ fields是硬编码的,不是来自任何来源
这意味着您根本不必担心注射。即使你在声明的任何其他地方使用它。
你当然应该小心,不要让它成为公共"以后!
答案 1 :(得分:0)
要防止查询中的SQL注入,请避免将该变量直接放入查询中。 而不是你应该使用PDO