【发布时间】:2014-06-17 04:19:40
【问题描述】:
我正在使用 PHP 从 MySQL 数据库中查询 CSS 设置,然后将其回显到 CSS 样式表中。示例 sn-p 如下:
<?php
$connect = //connect string
$query = ($connect, "SELECT bgcolor, font FROM displays WHERE name = 'mySettings'");
while ($row = mysqli_query($query)){
$bgcolor = $row[bgcolor];
$font = $row[font];
}
echo '
body {
background-color: #'.$bgcolor.';
font: '.$font.';
}
';
?>
“显示”表为每个设置的 CSS 属性提供一列。每行代表用户保存的一组颜色/字体/填充/边距设置。
“字体”列是数据类型 varchar(50)。 “bgcolor”应该是什么数据类型? CSS 想要查看十六进制值,但 MySQL 中没有十六进制数据类型。逻辑选择是将值存储为 int 类型并在 SELECT 语句中使用 HEX() 函数。
再一次,将其存储为 char(6) 是否更容易和/或使用更少的空间? PHP 只是将其视为字符串,而不是实际数字。十六进制值不会应用任何数学函数;它只是粘贴到 CSS 中。
在这种情况下,将值存储为 int 还是 char 是否有任何偏好?
【问题讨论】:
-
始终将这些内容存储为字符串,而不是数字。电话号码通常也应存储为字符串,而不是数字
-
我会将 CSS 属性值完全存储为数据库中的字符串(例如“#ab382d”)。如果不对 CSS 中的“#”进行硬编码,您甚至可以存储诸如“透明”或“蓝色”之类的内容,并且它仍然可以在您的 CSS 中使用。
-
您的颜色可以有前导 0,因此一种选择是保存为字符串,另一种选择是使用
hexdec()并存储为数字,但是您必须记住使用函数来获取十六进制通过倒车。 -
谢谢。 Stilly.stack,你对电话号码的评论让我想起了教授的课。他教我们将电话号码存储为字符串,这样任何人都无法尝试对其进行数学运算。没有人需要乘以“555-555-5555”,但一个编程错误可能会将“电话”列与“应付金额”列混淆并尝试这样的操作。因此,我们将“电话”列设为字符串,从而确保错误会产生错误而不是错误数据。同样的逻辑在这里有效吗?
-
不要为此使用 int。当您想要存储一些实际上是数字的数据时,请始终记住将其保存为数字,因为您想用它进行计算。使用电话号码或十六进制值,您不想计算某些东西。所以把它保存为一个字符。