2012-07-20 124 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