Php 用于检查mysql中的数字不工作的函数
我正在尝试编写一个函数来检查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
$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,您如何知道函数不起作用?