使用魔术数字是一种好习惯吗?

时间:2015-02-10 01:41:19

标签: html sql language-agnostic coding-style

我正在制作一个网络应用。在服务器端的某些情况下,我正在进行mysql查询,其中我基本上说where d.id=2意味着我将外键硬编码到另一个表。或者在客户端,我有一个带有无线电字段的表单,输入字段值是表的主键的id号(例如,1,2,3)。

我想知道是使用这些'魔术数字'的好习惯,还是我应该在查询中使用字符串值(需要连接)并在表单中作为输入值,然后我需要获取使用查询使用该字符串值的id。

似乎两种方式,如果我需要编辑表行(更改主键值或字符串值),那么我将不得不更新客户端和服务器端的所有内容。

什么是好的做法?

由于

2 个答案:

答案 0 :(得分:2)

ID号通常由数据库任意分配(例如,使用MySQL AUTO_INCREMENT),它们只是时间上的意外事故。依赖它们并将它们硬编码到代码中通常是一个坏主意。相应的名称不太可能改变,所以如果你必须硬编码,那通常会更安全。

此外,硬编码ID会使代码更难理解。魔术数字对读者没有固有的意义,但字符串是助记符。

答案 1 :(得分:1)

这是一种格式化的评论。由于omega请求了一个例子,这里有一个使用ColdFusion语法

<cfquery name="getChoices">
select choiceId, choice
from choices
</cfquery>

<form>
<cfoutput query = "getChoices">
<input type = "radio" name="theChoice" value = "#choiceID#">#choice#
</cfoutput>
<input type="submit>
</form>

请注意,cfoutput标记循环遍历查询结果。