我想知道MySQL PREPARE / EXECUTE子句和PHP mysqli准备/执行方法之间是否有任何区别?在预防注射方面是好还是坏?
我很好奇,因为我正在编写一些数据库存储过程,在一个中,表和属性在编译时是未知的。我可以将数据写为静态,但查询有点复杂,它只会使程序膨胀很多控制逻辑。它让我想到了这一点,我只是想知道,当我只需要一个简单的语句时,我会用动态SQL编写一个简短的过程,或者只是准备并用PHP绑定它是否更好。
如果这是重复,我也很抱歉,当然欢迎链接到已经回答的SO问题。但是,我一般都看谷歌,并没有真正找到特定答案的方式。
答案 0 :(得分:3)
PHP mysqli是PHP中的一个层,围绕MySQL的准备/执行功能。
只要将来自用户的所有内容都填充到绑定变量中,两者都将使您免于SQL注入。
预处理语句,无论采用哪种方式处理,都可以实现更高效的高容量操作。在MySQL中,与像Oracle这样的高价DBMS相比,效率提升是适度的,但它仍然值得一试。
如果您需要将表名作为"变量"在您的应用中,没关系,您不能将表名视为绑定变量。因此,您需要对任何导致构造这些表名的用户输入完全偏执。
答案 1 :(得分:0)
当我回答2020年时,我了解到您应该使用PDO(而不是mysqli)来准备和绑定或绑定执行。它将被保护免受注射并且更加安全。