Php 用于检查mysql中的数字不工作的函数

Php 用于检查mysql中的数字不工作的函数,php,mysql,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 { $newE

我正在尝试编写一个函数来检查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

您没有说明它为什么不工作,但我猜在
//insert-into-events表中,您下面的代码正在使用
insert
中的
$newEventId
,如果初始的
$newEventId
导致
(mysql\u num\u行(mysql\u查询(“从事件中选择id,其中EventID=$gen”))==0)
返回
true
,但如果在递归函数上返回
true
,则不返回

尝试返回
中断
上的值,并使用该值而不是
$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..");

您没有说明它为什么不工作,但我猜在
//insert-into-events表中,您下面的代码正在使用
insert
中的
$newEventId
,如果初始的
$newEventId
导致
(mysql\u num\u行(mysql\u查询(“从事件中选择id,其中EventID=$gen”))==0)
返回
true
,但如果在递归函数上返回
true
,则不返回

尝试返回
中断
上的值,并使用该值而不是
$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..");

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

如果表中有
event\u id
列创建为
INT AUTO\u INCREMENT
SQL,则应如下所示:

INSERT INTO foo (event_id, ...) VALUES (<everything EXCEPT event_id>);
event_id = SELECT LAST_INSERT_ID();
插入foo(event_id,…)值();
event_id=选择最后一个_INSERT_id();

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

如果表中有
event\u id
列创建为
INT AUTO\u INCREMENT
SQL,则应如下所示:

INSERT INTO foo (event_id, ...) VALUES (<everything EXCEPT event_id>);
event_id = SELECT LAST_INSERT_ID();
插入foo(event_id,…)值();
event_id=选择最后一个_INSERT_id();

Ok。问题具体是什么?@邪恶游侠问题在标题中。但是
EventId()
do/意味着什么?在
if
之后的
break
语句是什么?这毫无意义。看起来你缺少了一个开头
{
@MathieuImbert No。所有大括号都是正确的。ITT,你怎么知道函数不起作用?好的。问题具体是什么?@UnholyRanger问题在标题中。但是
EventId()是什么呢
do/mean?在
if
之后的
break
语句是什么意思?它没有任何意义。而且看起来您缺少了一个开头
{
@MathieuImbert no。所有大括号都是正确的。ITT,您如何知道函数不起作用?