2012-07-20 195 views
0

我寫了一個生成許多「secret_key」的php代碼。代碼是使用for循環更新每個循環的不同記錄

<?php 

    include("/home3/kintest2/public_html/include/config.local.php"); 
    $connect= mysql_connect ($DBHOST,$DBUSER,$DBPASSWORD); 
    $select= mysql_select_db($DBNAME, $connect); 



    $test2= "SELECT * FROM `video` WHERE `type` LIKE 'private'"; 
    $results= mysql_query($test2, $connect); 
    $num_rows = mysql_num_rows($results); 


    for ($count=$num_rows; $count>=0; $count-- && $secret_key= uniqid().mt_rand(1,9)) 
    { 
    mysql_query("UPDATE video SET secret_key= '$secret_key' WHERE type='private'",$connect); 
    echo " count is {$count} key is {$secret_key}</br>"; 

    } 
    ?> 

我只有這個代碼有一個問題。所有滿足查詢條件的mysql記錄都被賦予相同的密鑰。但我希望將不同的鍵分配給每個記錄。 mysql_query("UPDATE video SET secret_key= '$secret_key' WHERE type='private'",$connect);

這是回聲輸出

  • 計數是13鍵
  • 計數是12個重點是50090128c89bb7
  • 計數是11鍵50090128c91153
  • 計數是10鍵是50090128c986c4
  • 計數是9鍵是50090128c9f9b5
  • 計數是8鍵是50090128ca7387
  • ....

總共有13條記錄。

回答

0

您的迴音輸出已經列出了不同的密鑰,但即使我寫的代碼有點不同:

while(!is_null($row = mysql_fetch_assoc($results))) { 
    $secret_key=uniqid().mt_rand(1,9); /* (?) */ 
    $dbCmd = "UPDATE video SET secret_key = '$secret_key' WHERE id={$row['id']}"; 
    msyql_query($dbCmd, $connect); 
} 

您的查詢字詞與類型=「私人」(ATM)每行的更新。 ..

+0

問題是,當我運行下面的代碼時,它使所有記錄具有相同的密鑰。 'mysql_query(「UPDATE video SET secret_key ='$ secret_key'WHERE type ='private'」,$ connect);' – 2012-07-20 07:17:24

+0

我修改了上面的代碼...... – Frosti 2012-07-20 07:25:22

+0

它給了我一些這方面的錯誤。 '$ dbCmd =「UPDATE video SET secret_key ='$ secret_key'WHERE id =」{$ row ['id']}「;解析錯誤:語法錯誤,意外'{' – 2012-07-20 07:30:51

0

如果您希望密鑰僅適用於一行,則必須修改您的UPDATE語句以僅影響一行。因此,一種方法是獲取標識行的一些唯一鍵,併爲它們中的每一個發出單獨的更新查詢。另一種選擇可能是使用SQL生成隨機密鑰服務器端。

+0

你可以幫我定製一下我的更新命令: – 2012-07-20 14:01:49

+0

@CongoleseMedia:我不知道你的數據庫,所以我不知道你的數據庫是什麼,Frosti已經給你提供了一些關於這個方法的細節:SET secret_key = LEFT MD5(RAND()),16)'或類似的方法可能適用於服務器端的方法。 – MvG 2012-07-20 14:30:04