使用当前行值的值进行表更新

时间:2014-01-21 06:43:11

标签: php mysql sql

在我的表格中,我有大约120个网址(主键)。现在我又添加了一列hash,它带有像这样的哈希值

$hash = md5($url);  

我想删除url作为主键(我做了)并将hash设置为主键。

目前,当我尝试将哈希作为主键时,请说dublicate entry错误。因为哈希的所有120条目都是空的。

所以我想更新我的表,以便hash应该设置为hash = md5(url)。

我的尝试:

<?php
    $con = mysqli_connect('127.0.0.1', 'root', '', 'mysql');                
    if (mysqli_connect_errno())    
    {    
        echo "Failed to connect to MySQL: " . mysqli_connect_error();    
        return;    
    }    
    $result = mysqli_query($con,"SELECT url from frrole_cateogry_article");    
    while ($row = @mysqli_fetch_array($result))    
    {    
        $url = $row['url'];
        $hash = md5($url);
        $update = "UPDATE table frrole_cateogry_article set hash='".$hash."' where url = '".$url."'";           
        if (!mysqli_query($con,$update))    
        {    
            //die('Error: ' . mysqli_error($con)); 
            echo "error";
        }       
    }           
?>
带有die('Error: ' . mysqli_error($con));

错误消息

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table frrole_popular_article set hash='3402a8ee11df088cd4e4a270dacbcc98' where u' at line 1

但它会给出错误回显error消息。

有什么问题?

2 个答案:

答案 0 :(得分:1)

UPDATE frrole_cateogry_article SET hash=md5(url)

就是这样。没有循环,也没有选择。这会将hash的每一行设置为同一行中md5的{​​{1}}。

答案 1 :(得分:1)

MySQL还支持MD5

您可以执行以下操作:

$update = "UPDATE frrole_cateogry_article set hash=md5( url_field )";

此语句将所有记录URL更新为md5哈希。不需要while循环。