php - 使用 PDO 中静态变量的表名

标签 php mysql sql pdo

我知道,PDO 不允许我在表上使用“参数系统”。我的问题是,我将所有表名称作为变量/静态变量存储在名为“Tables”的对象中(这样我就可以集中更新表名称)。

我只是找不到问题的答案,如果使用静态变量构建查询是一个好主意/不错的做法(用户无法更改表名称/浏览表,所以这不应该是一个安全问题)

示例:

$statement = $this->pdo->prepare('SELECT `category-id`, `icon`, `name` FROM ' . Tables::$BOARD_CATEGORIES);

我可以使用这种技术,还是应该坚持使用正常的“静态”方式? 谢谢:)

最佳答案

参数化预准备语句的主要安全优势在于,它可以防止在数据库解析语句之前将来自不可信来源的字符串插入 SQL 语句中;解析和准备语句后,只允许值替换,不允许可执行子句。

您可以将原始 SQL 查询视为“来自可靠来源的字符串”。如果它提高了可维护性,我认为没有理由从较小的字符串构建查询,前提是所有这些字符串也来自可靠的来源,例如您的 Tables 类。 (不过,我确实想知道您希望重命名表的频率。)

我不准备说它是不是“最佳实践”,但当我与伟大的蔚蓝帝国(一家真正公司的假名)合作时,我确实在行业中看到了类似的情况,并且我认为即使是“最佳实践”也不应该被视为教条。

关于php - 使用 PDO 中静态变量的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503856/

相关文章:

mysql - 根据冲突条件查找行

python - 如何去掉将科学记数法转换为精确值所产生的 json 字符串中的引号

php - 在从数据库获取设置的函数上我遇到了错误

mysql - 拥有超过 100000 个节点的 drupal,性能提升到非常高

mysql - JSF+JAVA+MYSQL

c# - 表格未显示在 Visual Studio 2012 中

javascript - 无法使用 gnupg 解密 openpgpjs (JS) 加密的 pgp 消息(通过 PHP 的 Ubuntu GPG)

php - create_function 而不是 lambda 函数 avartaco

php一段时间后插入数据

MySQL 左连接查询不起作用