基本上我创建了一个SQL查询,在数据库$i
中插入大约5000个随机数(目前只有10个才能弄明白)。
我之前曾尝试仅在MYSQL中进行此操作,但失败了,不想再浪费时间了。
它随机化一个10位数字并交叉检查该数字与数组($codes
),其中包含来自数据库中不同表的超过100,000个值。它还将新的随机数添加到新数组($newNumbers
),因此它不会生成相同的新数字,然后将数字添加到INSERT查询中。它还有一个嵌套的while
循环来创建第二个数字,它也必须是完全唯一的。
希望有道理..
无论如何,问题似乎是嵌套的,而似乎是无限循环(而不是增加$i
),但我无法理解为什么。
$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";
$i = 0;
while ($i <= 10){
$rand = mt_rand(1000000000, 9999999999);
if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
$newNumbers[] = $rand;
$second = 0;
while ($second == 0){
$rand2 = mt_rand(1000000000, 9999999999);
if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
$query .= " ('', $rand, $rand2)";
$newNumbers[] = $rand2;
$second = 1;
$i++;
}else
$duplicates ++;
}//end second loop
}else
$duplicates ++;
}//while
答案 0 :(得分:2)
$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";
$i = 0;
while ($i <= 10){
$rand = mt_rand(1000000000, 9999999999);
if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
$newNumbers[] = $rand;
$second = 0;
while ($second == 0){
$rand2 = mt_rand(1000000000, 9999999999);
if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
$query .= " ('', $rand, $rand2)";//missing quotes
$newNumbers[] = $rand2;
$second = 1;
$i++;
}else
$duplicates ++;
}//end second loop
}else
$duplicates ++;
}//while
答案 1 :(得分:1)
$query .= " ('', $rand, $rand2")";
检查你的报价
答案 2 :(得分:0)
您的"
行中有一个无关的$query .= " ('', $rand, $rand2")";
字符。您应该按如下方式修改代码:
$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";
$i = 0;
while ($i <= 10){
$rand = mt_rand(1000000000, 9999999999);
if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
$newNumbers[] = $rand;
$second = 0;
while ($second == 0){
$rand2 = mt_rand(1000000000, 9999999999);
if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
$query .= " ('', $rand, $rand2)";
$newNumbers[] = $rand2;
$second = 1;
$i++;
}else
$duplicates ++;
}//end second loop
}else
$duplicates ++;
}//while
答案 3 :(得分:0)
所以我似乎在检查$rand2
是否在第一个IF语句中的$newNumbers
数组中,$i
,$rand2
的第一个循环之后每次都在$newNumbers
,因为它不会再生,因此无限循环。
还要感谢所有人用额外的引号发现解析错误,我在TextWrangler(顺便说一下这是史诗)中使用了它,但在简化发布查询时出错了。
if (!in_array($rand, $codes) && !in_array($rand2, $newNumbers) ){
$query = "INSERT INTO 'table' ('num_id', `num1`, `num2`) VALUES";
$i = 0;
while ($i <= 10){
$rand = mt_rand(1000000000, 9999999999);
if (!in_array($rand, $codes) && !in_array($rand, $newNumbers) ){
$newNumbers[] = $rand;
$second = 0;
while ($second == 0){
$rand2 = mt_rand(1000000000, 9999999999);
if (!in_array($rand2, $codes) && !in_array($rand2, $newNumbers) ){
$query .= " ('', $rand, $rand2)";
$newNumbers[] = $rand2;
$second = 1;
$i++;
}else
$duplicates ++;
}//end second loop
}else
$duplicates ++;
}//while