mysql INSERT INTO循环不插入一些行

时间:2014-03-03 15:15:15

标签: php mysql loops while-loop

我有一个循环,它将新行插入我的数据库。它专门设计用于在“名称”列中插入具有唯一值的特定行数。

while($rows_inserted < 100) {
    // Create 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代码识别出该行已经创建了,而事实上它并没有。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你必须在之前定义$rows_inserted

 $rows_inserted = 0 ;
 while($rows_inserted < 100) {
 ....

您正在插入包含100个不同$ number的100行,因此您必须确保随机可以重复某些值示例501250605012 ...,如果您的列name中有一个唯一约束,它不会保存相同的数字。

您保存了87个值意味着您有13个重复未保存。所以:

1 - 获得与此类似的唯一$number

$number = 5001 + $rows_inserted ;
mysqli_query($con,"INSERT INTO cmssps_card_codes (id, parent_id, name, status) 
                   VALUES ('', '', '$number', '0')");

2 - 或更改列名并删除其中的UNIQUE约束。接受重复的值。