0

我想创建一个 PHP 页面,它从 MySQL 数据库中选择一条随机记录(一个字符串,将用作唯一的“令牌”)。我只想选择这个随机记录一次,之后再也不选择。

为此,我向表中添加了一个额外的字段(名为“numberfield”,包含 number 0),该字段在选择特定记录时递增。这样,只能0选择 numberfield 表字段中值为 的记录。一旦选择了随机记录,numberfield 字段就会增加到1并且不能再选择。我正在考虑使用以下 PHP 代码:

$result = mysql_query("SELECT token FROM table WHERE numberfield < **1** ORDER BY RAND() LIMIT 0,1");

if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}

$row = mysql_fetch_row($result);
echo $row[0];
mysql_query("UPDATE table SET numberfield=numberfield+1 WHERE token=" + $row[0] + "");

这会是正确的方法吗?有什么想法吗 ?

此外,我想避免在页面刷新时选择不同的随机记录。将“令牌”保留在缓存中的正确和最简单的方法是什么?例如,是否可以将“令牌”保留在页面刷新期间不会被覆盖的会话中,或者我是否必须使用 Ajax 等其他技术。非常感谢您的帮助和评论!

4

1 回答 1

0
  1. 您应该停止使用mysql_已弃用的函数。
  2. 您应该避免ORDER BY RAND()在较大的表中使用,因为寻找随机数会产生开销。
  3. 要完成 aSELECT ... UPDATE你需要某种锁定。一行被随机选择两次的可能性很小。这可以使用存储过程来防止。
  4. 您可以只使用 PHP 生成的会话 id 或其中的一部分。本主题讨论会话 id 的唯一性,本主题讨论不同的长度。
  5. 您也可以在 PHP 端创建一个随机字符串,这样可以节省连接数据库的开销。
于 2013-01-19T22:03:01.120 回答