Я пытаюсь вставить случайные данные с помощью php в базу данных ipromapp, которую я создал (mysql) с помощью Faker, которую я импортировал с помощью композитора (он работает нормально).
Установил соединение - работает.
$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 - так что-то работает, но я предполагаю, что запрос или логика неверны - если кто-то может указать мне на проблему, если он видел что-то конкретное?
SS из вывода phpMyAdmin после запуска файла php: // вывод в браузере (я использую MAMP и только что запустил localhost) http://prntscr.com/mdxe4l
// 5 сгенерированных пользователей http://prntscr.com/mdxee9
// По какой-то причине, когда я запускаю скрипт в первый раз, он генерирует 2 для первого идентификатора http://prntscr.com/mdxgc3
Хм хорошая идея на самом деле! Первоначально я хотел отладить код и просмотреть его построчно, но у меня возникли проблемы с установкой/настройкой xdebug...






Во втором цикле foreach вы используете $connection->insert_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}')
");
}
превосходно! Я приветствую вас! Спасибо за помощь дружище :)
Вы можете попробовать повторить каждый оператор SQL и убедиться, что они хорошо выглядят и работают при ручном запуске.