【发布时间】:2014-06-17 02:42:39
【问题描述】:
所以,我有一个以 62 为基数生成随机数的函数,我想尝试在表中插入一个长度为 7 的随机唯一数。我最初在输入值时使行自动递增,但这涉及大量插入、选择和更新行。这是迄今为止不起作用的新代码:
do {
if (isset($query)) { mysqli_stmt_close($query); }
$query = mysqli_prepare($connection, "INSERT INTO table1 value1=?");
mysqli_stmt_bind_param($query, 's', rand_64(7));
} while (!mysqli_stmt_execute($query));
mysqli_stmt_close($query);
我的问题是:这样的事情是否可以实现,或者生成随机数会更好,尝试 SELECT 语句,如果返回的行 == 0,停止循环并插入值?
编辑:我应该注意,如果值是唯一的(即尚未在表中),它会正确插入值,但如果值已经存在,则无法插入。
非常感谢。 :)
【问题讨论】:
-
你试过
ON DUPLICATE KEY或INSERT IGNORE吗? -
您必须插入其中多少个?这是一次性要求,还是需要反复执行?
-
Fred: ON DUPLICATE KEY 在这种情况下可能不起作用,因为我需要知道生成了什么数字。 Mike:用户正在上传文件,这会用随机字符串生成器重命名它们,以便以后可以链接到它们。最终目标是保持循环并尝试插入,直到没有发生冲突。
-
'uniqid' 和 'base_convert' 或 'base64_encode' 会做你想做的事吗?