php检查数据库中是否存在数字

时间:2011-04-19 15:38:41

标签: php mysql

基本上我不想在某些字段中重复数字。我该怎么做?

table user:
id   name    group
1    a        2
2    b        3
3    c        1
4    d        6
5    e        5

$q = $db->query("SELECT COUNT(t_group) FROM user");
$r = $q->fetch_row;
if($r[0] > 0) :
     $rand_no = rand(1,10);
     $db->query("INSERT INTO user(name, group) VALUES('$name','$rand_no')");
endif;

3 个答案:

答案 0 :(得分:3)

使用insert ... where not exists

示例代码

//prevent those pesky SQL injection attacks
$rand_no = mysql_real_escape_string($rand_no);
$name = mysql_real_escape_string($name);

//Only insert if group is not already used
$db->query("insert into user(name, `group`) 
            VALUES('$name',$rand_no) 
            where not exists 
              (select `group` from user where `group` = '$rand_no') )";

我添加了前两行,提醒你不要忘记逃避这些值以防止SQL注入攻击。 (如果$rand_no是由php代码生成的,当然不需要转义它,但如果用户可以操作它,那么你应该

其次group是一个保留字,如果你想在查询中使用它,你需要将它括在反引号'''中。

修改
在数据库中强制执行
使用group

将字段ALTER TABLE设置为唯一字段
ALTER TABLE CHANGE COLUMN `group` `group` UNIQUE

答案 1 :(得分:1)

<强> PHP

var stop_cycle = 0;

while (!stop_cycle) {

$rand_no = rand(1,10);
$db->query("SELECT group FROM user WHERE group = ".$rand_no);

// check if query returns any result
if(mysql_affected_rows() == 0)  {

// value is unique, let's insert it
 $db->query("INSERT INTO user(name, group) VALUES('$name','$rand_no')");

// end cycle
 stop_cycle=1;
}

}

答案 2 :(得分:0)

您需要生成一个随机数,然后查看该字段中是否已存在具有该数字的记录。假设你的随机数是8

select top 1 group from user where group=8

如果有任何行返回,则该数字不是唯一的。