0

我想知道 MySQL PREPARE/EXECUTE 子句和 PHP mysqli 准备/执行方法之间是否有任何区别?预防注射是好是坏?

我很好奇,因为我正在编写一些数据库存储过程,其中一个表和属性在编译时是未知的。我可以将数据写成静态的,但是查询有点复杂,它只会用大量的控制逻辑使过程膨胀。但这让我想到了这一点,我只是想知道,当我只需要一个简单的语句时,我用动态 SQL 编写一个简短的过程还是只用 PHP 准备和绑定是否更好。

如果这是重复,我也很抱歉,当然欢迎链接到已经回答的 SO 问题。但是,我一般在谷歌上查看,并不能真正找到具体答案的方式。

4

2 回答 2

3

PHP mysqli 是 PHP 中的一个层,围绕 MySQL 的准备/执行功能。

只要来自用户的所有内容都填充到绑定变量中,两者都会使您免受 SQL 注入的影响。

以任何一种方式处理的准备好的语句也有助于更高效的大容量操作。在 MySQL 中,与 Oracle 等高价 DBMS 相比,效率的提升是适度的,但它仍然值得每一点麻烦。

如果您需要在应用程序中将表名作为“变量”,那没关系,但您不能将表名视为绑定变量。因此,您需要对导致构建这些表名的任何用户输入完全偏执。

于 2012-06-19T12:39:40.643 回答
0

当我回答 2020 年的问题时,我了解到您应该使用 PDO 来准备和绑定或绑定内部执行,而不是使用 mysqli。它将免受注射并且更安全。

于 2020-06-27T18:20:30.510 回答