我正在尝试在Faker的帮助下使用php在我创建的(mysql)ipromapp数据库中插入随机数据-我通过composer导入了它(工作正常)。
我建立了连接-它正在工作。
$connection = mysqli_connect('localhost','root','root', 'ipromapp');
创建了Bank类和一个randomize()方法-在我内部,这段代码无法正常运行。它创建了5个用户(因此第一个查询正常工作)-我在另一个foreach中进行的第二个查询(我需要随机数的事务,因此我不能使用第一个foreach的范围-1到5)。
我已经正确索引了索引,并与user_id
表中的transaction
到id
表的user
(主键)建立了关系(ss:{{ 3}})
我试图编辑查询,更改第二个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/mdxfs1
// 5个生成的用户 http://prntscr.com/mdxe4l
//由于某种原因,我第一次运行脚本时,它会为第一个ID生成2 http://prntscr.com/mdxee9
答案 0 :(得分: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}')
");
}