【发布时间】:2014-04-04 17:09:42
【问题描述】:
我有一个循环将新行插入到我的数据库中。它专门用于在'name' 列中插入具有唯一值的特定行数。
while($rows_inserted < 100) {
// Create a random number
//Min & Max values for the random numbers
$min = 5001;
$max = 5100;
$number = rand($min,$max);
//Connect to the DB using $con details & execute query
mysqli_query($con,"INSERT INTO cmssps_card_codes (id, parent_id, name, status) VALUES ('', '', '$number', '0')");
if (mysqli_affected_rows($con) === 1) {
$rows_inserted++; // update the counter
}
}
在这个特定的有限实例中,我在 5001 和 5100 之间创建了 100 个“随机”数字,因此在这种情况下它是多余的,但随机数用于生产实例 - 只是为了避免混淆。
我的问题是该语句成功执行,但实际上只创建了 87 奇数行。然后,我尝试运行代码以插入先前排除的行的单个实例,然后它进入一个无限循环——但是,我可以直接在数据库中创建该行。就好像 PHP 代码识别出该行已被创建,而实际上它并没有。
有什么想法吗?
【问题讨论】:
-
name有unique约束? -
您必须向我们展示表定义,以查看您是否试图违反某些约束。预计其中会有一些重复的 $number。
-
如果你以 100 的间隔生成 100 个随机数(例如 1 .. 100),你不可能得到 100 个唯一的数字!会有重复。这就是为什么你从 100 个随机数中得到 87 行的原因。
标签: php mysql loops while-loop