我有一个循环,它将新行插入我的数据库。它专门设计用于在“名称”列中插入具有唯一值的特定行数。
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代码识别出该行已经创建了,而事实上它并没有。
有什么想法吗?
答案 0 :(得分:1)
你必须在之前定义$rows_inserted
。
$rows_inserted = 0 ;
while($rows_inserted < 100) {
....
您正在插入包含100个不同$ number的100行,因此您必须确保随机可以重复某些值示例5012
,5060
,5012
...,如果您的列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约束。接受重复的值。