检查mysql中的数字不起作用的函数

时间:2013-03-16 21:35:12

标签: php mysql

我正在尝试编写一个函数来检查mysql中是否存在随机数

$newEventId = rand(1000, 10000);
EventId($newEventId);

function EventId($gen)
{

  if (mysql_num_rows(mysql_query("SELECT id FROM events WHERE EventID=$gen" )) == 0) 
    break;

  // recall function
  else 
  {
    $newEventId = rand(1000, 10000);
    EventId($newEventId);
  } 
}

//insert into events table

2 个答案:

答案 0 :(得分:1)

为什么不使用AUTO_INCREMENT列而不是尝试生成“随机”ID?此外,EventId函数不安全,因为选择id并将其存储在数据库中不是原子的,因此另一个进程可能已经使用了相同的id。

如果表的event_id列创建为INT AUTO_INCREMENT,则SQL应如下所示:

INSERT INTO foo (event_id, ...) VALUES (<everything EXCEPT event_id>);
event_id = SELECT LAST_INSERT_ID();

答案 1 :(得分:0)

你没有说明为什么它是not working,但我的猜测是你//insert into events table以下的代码正在使用$newEventId中的INSERT,它运行正常如果初始$newEventId导致(mysql_num_rows(mysql_query("SELECT id FROM events WHERE EventID=$gen" )) == 0)返回true,但如果它在递归函数上返回true则不会。

尝试返回break上的值并使用该值代替$newEventId

function EventId($gen)
{

  if (mysql_num_rows(mysql_query("SELECT id FROM events WHERE EventID=$gen" )) == 0) {
  return $gen; // return the number that will be set as $EventId and used in the insert
  break;
  }
  // recall function
  else 
  {
    $newEventId = rand(1000, 10000);
    EventId($newEventId);
  } 
}

$newEventId = rand(1000, 10000);
$EventId = EventId($newEventId);  // set the returned $gen to $EventId to be used in the Insert query

//insert into events table
mysql_query("INSERT INTO events ... EventID=$EventId..");