php - 避免在 mysql 查询中进行硬编码

标签 php mysql oop database-schema

我有一张禁止原因表:

id | short_name | description
 1      virus     Virus detected in file
 2      spam      Spammy file
 3      illegal   Illegal content

当我禁止一个文件为病毒时,我在代码中执行以下操作:

$file -> banVirus();

它将文件 ID 和禁止原因插入表中:

"INSERT INTO 'banned_files' VALUES (61234, 1)"

我的问题是; 我硬编码值 1 是否有问题?,以指示垃圾邮件文件。

我应该在我的配置中使用像define ('SPAM', 1)这样的定义,这样我就可以用定义替换1吗?还是根本不重要?

最佳答案

如果id是一个自动递增字段,那么这是一个非常大的问题!由于id是自动生成的,很难保证其稳定性;即它们可能会改变。

如果 id 是您手动分配的,那么这不是一个大问题,但这是一个不好的做法。因为魔法数字很容易导致困惑和错误。谁知道在阅读代码时“1”是什么意思?

因此,无论哪种方式,您最好为每个案例分配一个稳定、可读的 ID。

我同意@Tenner 的观点,即为这些静态的、不变的数据建立一个表格也几乎没有意义。您的 banned_files 表应具有如下所示的列:

reason ENUM('virus', 'spam', 'illegal') NOT NULL

您的数据库中不再需要任何内容​​。向用户输出此内容时,您可以通过 PHP 代码使用简单数组添加可读的原因。

关于php - 避免在 mysql 查询中进行硬编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321409/

相关文章:

php - 按城市显示数组数据

php - 显示选择查询数据,但我想用子查询创建新表选择它很好,但问题是查询运行需要 30 分钟

php - 如何使用 HTML 中的 Jquery 打开链接,从 MySql 和 PHP 获取 URL

c# - C#中的对象健美操一级集合规则示例?

php - 使用php解析html文件时出现问题

php - php mysql 中不显示变音符号和特殊字符

php - 不要直接访问超全局 $_GET 数组

mysql - 如何重启在 Ubuntu linux 上运行的远程 MySQL 服务器?

在游戏实体类中重用代码的 Pythonic 方式

c++ - 对于 C/C++,什么时候不使用面向对象编程有好处?