如何在foreach查询中插入第二个foreach查询?

时间:2019-01-29 20:15:40

标签: php mysql foreach

我正在尝试在Faker的帮助下使用php在我创建的(mysql)ipromapp数据库中插入随机数据-我通过composer导入了它(工作正常)。

我建立了连接-它正在工作。

$connection = mysqli_connect('localhost','root','root', 'ipromapp');

创建了Bank类和一个randomize()方法-在我内部,这段代码无法正常运行。它创建了5个用户(因此第一个查询正常工作)-我在另一个foreach中进行的第二个查询(我需要随机数的事务,因此我不能使用第一个foreach的范围-1到5)。

我已经正确索引了索引,并与user_id表中的transactionid表的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

1 个答案:

答案 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}')
        ");
}