php - 如何在 foreach 查询中插入第二个 foreach 查询?
问题描述
我正在尝试在我在 Faker 的帮助下创建的 ipromapp 数据库(mysql)中使用 php 插入随机数据 - 我使用 composer 导入了该数据库(它工作正常)。
我建立了连接 - 它正在工作。
$connection = mysqli_connect('localhost','root','root', 'ipromapp');
创建了类 Bank 和一个方法 randomize() - 在里面我有这个不能完全正常工作的代码。它创建了 5 个用户(因此第一个查询工作正常) - 我在另一个 foreach 中进行的第二个查询(我需要随机数量的事务,所以我不能使用第一个 foreach 的范围 - 1 到 5)。
我已经正确索引并创建了与表的user_id
从transaction
表到id
(主键)的关系user
(ss: http: //prntscr.com/mdxfs1)
我尝试编辑查询,更改第二个 foreach 的范围 - 我有一些小的“灯泡”时刻,但我很难将它们转换为代码。
function randomize()
{
// accessing variables outside the function
global $faker, $connection;
$insertNum = 0;
// deleting users so that we have only 5 we want
$connection->query("TRUNCATE TABLE `users`");
$connection->query("TRUNCATE TABLE `transactions`");
// adding 5 people into the users db
foreach (range(1,5) as $x){
$body = $faker->firstName($gender = null) . ' ' . $faker->lastName;
$connection->query("
INSERT INTO users (name, birth_date)
VALUES ('{$body}', '{$faker->date($format = 'Y-m-d', $max = '-10 years')}')
");
printf ("New Record has id %d.\n", $connection->insert_id);
// random number of transactions
$randomNum = rand(20,40);
$insertNum += $randomNum;
printf ( "Random number is %d.<br>", $randomNum);
// adding random number of transactions from past 6 months
foreach (range(1, $insertNum) as $y) {
$connection->query("
INSERT INTO transactions (user_id, date, deposit, withdraw)
VALUES ('{$connection->insert_id}','{$faker->date( $format = 'Y-m-d', $max = 'now')}', '{$faker->randomDigit}', '{$faker->randomDigit}')
");
}
}
}
我预计查询会从每个用户产生 20-40 个事务。我认为与id有关?查询仅生成 1 - 所以有些东西正在工作,但我猜查询或逻辑不正确 - 如果有人能指出我的问题,如果他看到任何特别的东西?
运行 php 文件后来自 phpMyAdmin 输出的 SS:// 在浏览器中输出(我使用 MAMP 并且刚刚运行 localhost) http://prntscr.com/mdxe4l
// 5 个生成的用户 http://prntscr.com/mdxee9
// 出于某种原因,我第一次运行脚本时,它会为第一个 ID http://prntscr.com/mdxgc3生成 2
解决方案
在您的第二个foreach
循环中,您$connection->insert_id
用于获取用户的 ID,但发生的情况是,在第一个循环之后,它正在获取刚刚插入的该事务的 ID,并且可能会引发未显示的错误。
您可以做的是在循环之前将用户的 ID 分配给一个变量:
$userId = $connection->insert_id;
foreach (range(1, $insertNum) as $y) {
$connection->query("
INSERT INTO transactions (user_id, date, deposit, withdraw)
VALUES ('{$userId}','{$faker->date( $format = 'Y-m-d', $max = 'now')}', '{$faker->randomDigit}', '{$faker->randomDigit}')
");
}
推荐阅读
- python - 如何根据行操作有条件地按列分组并转换熊猫数据框?
- java - TreadFactory 设置基于时间的优先级
- amazon-web-services - 删除“Route53 Registrar 创建的 HostedZone”
- python - 如何解决“赋值前引用的局部变量'强调'”错误?
- twilio - 鉴于 Twilio 声明每秒 1 条短信 - 我是否需要修改批量发送短信功能?- 姜戈
- r - 简单 R 代码中难以捉摸的语法错误
- lua - (Lua)每次运行三个 if 语句之一时,如何增加一个变量?
- ios - layoutMarginsGuide 产生不需要的前导和尾随边距
- javascript - 在ajax中创建函数
- c# - 无法在脚本生成的多个位置上实例化一副纸牌