Php 将列添加到表中,并根据另一列的值设置值
我遇到了以下问题:我有一个包含多个列的表,现在我需要向该表添加一个新列,然后用另一列的加密(md5)值填充它 (一) (二)Php 将列添加到表中,并根据另一列的值设置值,php,sql,sql-server,Php,Sql,Sql Server,我遇到了以下问题:我有一个包含多个列的表,现在我需要向该表添加一个新列,然后用另一列的加密(md5)值填充它 (一) (二) 有更好的方法吗?您的方法实际上是将列添加到表中。另一种方法是动态计算: ALTER TABLE myTable ADD md5_city as md5(col); 这仅在需要时计算值 这里似乎有3个独立的任务: 添加列 更新现有值 计算要插入的新值 任务1:允许存储MD5 您的代码很好,但是您应该限制列的大小,因为MD5的长度只有32个字符 ALTER TABLE my
有更好的方法吗?您的方法实际上是将列添加到表中。另一种方法是动态计算:
ALTER TABLE myTable ADD md5_city as md5(col);
这仅在需要时计算值 这里似乎有3个独立的任务:
ALTER TABLE myTable ADD md5_city CHAR(32);
任务2:更新现有行
假设您使用的是MSSQL并且col
包含<8000个字符(如果是NVARCHAR,则为4000个)
下面的SQL将计算所有现有行的col
的MD5,并将其存储在MD5\u 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";
为什么要将同一个值存储两次?MD5是nbot加密,它是一个CrytPhotographic哈希。不,我实际上需要添加一个新列,并用另一列的MD5值填充它。@user7808407。计算列可能更安全。你不需要工作来保持最新。而且,您可以保存它,因此它实际上与表一起保存。您能详细说明task2中发生了什么吗?您正在使用myTable并将任何md5_city列的值设置为。。。。什么?我不太明白“=”后面是什么,我已经编辑了答案,希望能澄清一点。任务2是为MSSQL中的
myTable
的所有现有行计算MD5。
UPDATE myTable SET md5_city = CONVERT(VARCHAR(32), HashBytes('MD5', col), 2)
$sql = "UPDATE myTable SET col = '{$x}', MD5_city = '" .md5($x). "' WHERE ID = 1";