我遇到了以下问题:我有一个包含多个列的表,现在我需要在此表中添加一个新列,然后用另一列的加密(md5)值填充它。
1)
ALTER TABLE myTable ADD md5_city VARCHAR(255);
2)
"UPDATE myTable SET md5_city = " . md5($cityValue) . ";"
有更好的方法吗?
答案 0 :(得分:1)
您的方法实际上将列添加到表中。另一种方法是即时计算:
ALTER TABLE myTable ADD md5_city as md5(col);
仅在您需要时计算该值。
答案 1 :(得分:0)
看起来你在这里有3个单独的任务:
任务1:允许存储MD5
您的代码很好,但您应该限制列的大小,因为MD5的长度只有32个字符
ALTER TABLE myTable ADD md5_city CHAR(32);
任务2:更新现有行
假设您使用的是MSSQL且col
包含< 8000个字符(如果是NVARCHAR则为4000)
以下SQL将为所有现有行计算col
的MD5,并将其存储在md5_city
列中。这应该直接在SQL中作为一次性运行,以更新表中已有的行:
UPDATE myTable SET md5_city = CONVERT(VARCHAR(32), HashBytes('MD5', col), 2)
任务3:从PHP执行对表的更新时保持列更新
在您的PHP中,对于给定行的col
的任何更新都应更新city_md5
,例如:
$sql = "UPDATE myTable SET col = '{$x}', MD5_city = '" .md5($x). "' WHERE ID = 1";