2011-04-02 160 views
2

为什么不能使用此代码?PHP MySQL while循环

它创建一个随机数,如果它存在于数据库中,那么它会生成一个新数字,直到它可以插入到唯一键中,否则它将直接插入到数据库中。

$id; 
    do { 
    $id = mt_rand(1, 10); 
    "SELECT count(*) FROM accounts WHERE id = '$id'"; 
    } while (count != 0); 

    $sql = "INSERT INTO accounts (id, username, email, password, sex) 
    VALUES ('$id', '$username', '$email', '$password', '$sex')"; 

mt_rand为测试目的而低的原因。

+0

不,没有,我的脚本的目的是purposefull足以需要它的工作。 – phpabuse 2011-04-02 03:44:54

+0

然后检查我的解决方案: - ?并告诉我它是否按预期工作。 – Khez 2011-04-02 03:50:08

回答

2

那是因为,你是不是真的烧MySQL查询。你只需要查询字符串就可以了。你必须传递字符串mysql_query(..)。检索资源,然后检出最后的行数。

方法#1:(修改代码)

$id;$count; 
do { 
    $id = mt_rand(1, 10); 
    $res = mysql_query("SELECT count(*) as c FROM accounts WHERE id = '$id'"); 
    $row = mysql_fetch_array($res); 
    $count = $row['c']; 
} while ($count != 0); 

$sql = "INSERT INTO accounts ..."; 
//.. 

方法#2:

  • 修改您的MySQL表,使用一个auto_increment。创建一个表这样
  • create table myTABLE (
        id integer aut_increment, 
        username varchar(128), 
        email varchar(128), 
        .. 
        primary key(id) 
    );
1

你为什么要用这种方法生成一个ID?为什么你不使用自动递增的ID?

CREATE TABLE accounts (
    id INT NOT NULL AUTO_INCREMENT, 
) 

使用生成使用mt_rand不作一大堆的道理,并会与你得到更多的账目令人难以置信的昂贵的ID。

+3

个人而言,我喜欢偶尔使用O(n^Infinity)方法... – cwallenpoole 2011-04-02 03:46:31

0

呃......似乎是在代码中的一些轻微问题:

$id; 
do { 
    $id = mt_rand(1, 10); 
    $c=mysql_query('SELECT id FROM accounts WHERE id = '.$id.' LIMIT 1;'); 
}while(mysql_num_rows($c)!=0); 

附:你应该考虑寻找到:uniqid PHP手册,这是不使用的mysql_query auto-incrementing an sql field

+0

此查询总是返回1行,限制和mysql_num_rows是毫无意义的 – 2011-04-02 03:54:32

+0

除非...它失败o.o – Khez 2011-04-02 03:56:52

0

几件事情

  1. 它不提取查询结果(不存在)
  2. count是一个内置的PHP方法,而不是一个数字。
  3. 你不应该具有多次往返到数据库(它是一个非常坏主意来生成一个随机标识符的方式)
+0

那么你会怎么做? – phpabuse 2011-04-02 03:47:39