Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将列添加到表中,并根据另一列的值设置值_Php_Sql_Sql Server - Fatal编程技术网

Php 将列添加到表中,并根据另一列的值设置值

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

我遇到了以下问题:我有一个包含多个列的表,现在我需要向该表添加一个新列,然后用另一列的加密(md5)值填充它

(一)

(二)


有更好的方法吗?

您的方法实际上是将列添加到表中。另一种方法是动态计算:

ALTER TABLE myTable ADD md5_city as md5(col);

这仅在需要时计算值

这里似乎有3个独立的任务:

  • 添加列
  • 更新现有值
  • 计算要插入的新值
  • 任务1:允许存储MD5

    您的代码很好,但是您应该限制列的大小,因为MD5的长度只有32个字符

    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";