2014-01-21 29 views
0

在我的表格中,我有大約120個url(主鍵)。現在我增加了一個列hash這需要這樣使用當前行值的值更新表格

$hash = md5($url); 

我想刪除URL的哈希值作爲主鍵(我做到了),並設置散列作爲主鍵。

當前,當我嘗試使散列作爲主鍵,說dublicate條目錯誤。因爲哈希的所有120條目都是空的。

所以我想更新我的表,使散列應設置爲散列= 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消息。

出了什麼問題?

+1

爲什麼你註釋掉了'mysqli_error($ con)'?這可以告訴很多 –

+0

爲什麼不將自動ID列設置爲主鍵,然後更改所有散列? –

+0

顯示你的錯誤信息... – user1844933

回答

1
UPDATE frrole_cateogry_article SET hash=md5(url) 

就是這樣。不需要循環,也不需要選擇。這將在每行設置hash在同一行中爲urlmd5

+0

謝謝,但它說'檢查手冊,對應於您的MySQL服務器版本的正確語法使用附近的'表frrole_popular_article設置哈希= md5(url)'在第1線,甚至相同的phpmyadmin –

+0

請參閱更新。從查詢中刪除單詞「TABLE」。它不需要更新查詢 –

1

MySQL還支持MD5

你可以這樣做:

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

此語句更新所有的記錄URL來MD5哈希值。不需要while循環。

+0

這將需要不必要的循環仍然在那裏。它可以用一個非常簡單的一個班輪完成,而不需要一個循環,並選擇 –

+0

哦,是的。我的意圖是提出同樣的建議。我錯過了。更新了我的答案。 –

相關問題