我有一张禁止原因表:
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/