У меня есть в бд таблица
category
и есть запрос который получает
id
категории далее вставляет запись в таблицу
freeroll
. Как изменить запрос что бы когда я получаю
category_id
бралась запись по этому
id
из таблицы
category
и значения которые я получаю а это:
category_name
category_img
и
category_url
так же добавлялись в таблицу
freeroll
?
Сам запрос
<?php
require_once __DIR__.'/boot.php';
// убеждаемся, что пост-параметр category_id существует, он массив, и в нем есть элементы
if(isset($_POST['category_id']) && is_array($_POST['category_id']) && count($_POST['category_id']) > 0 || isset($_POST['symbol']) && is_array($_POST['symbol']) && count($_POST['symbol']) > 0 || isset($_POST['buyin_symbol']) && is_array($_POST['buyin_symbol']) && count($_POST['buyin_symbol']) > 0)
{
foreach($_POST['category_id'] as $category_id)
{
// вставляем категории в промежуточную таблицу для хранения выбранных категорий
$stmt = pdo()->prepare("INSERT INTO `freeroll` (`name_turnament`, `prize`, `password`, `data`, `time`, `category_id`, `prize_symbol`, `buyin` , `buyin_symbol`) VALUES (:name_turnament, :prize, :password, :data, :time, :category_id, :prize_symbol, :buyin, :buyin_symbol)");
$stmt->execute([
'name_turnament' => $_POST['name_turnament'],
'prize' => $_POST['prize'],
'password' => $_POST['password'],
'data' => $_POST['data'],
'time' => $_POST['time'],
'category_id' => $category_id,
'prize_symbol' => $_POST['symbol'],
'buyin' => $_POST['buyin'],
'buyin_symbol' => $_POST['buyin_symbol'],
]);
}
pdo('commit'); // все категории вставили, консистентность данных достигнута, можно фиксировать транзакцию
}
else
{
pdo('rollback'); //нет выделенных категорий, если они обязательны, то нужно откатить вставку записи в таблицу faucets. Если нет, то else нужно не использовать
// генерируем сообщение об ошибке, если нужно
}
header('Location: addfreerolls');
Пробовал такой запрос
<?php
require_once __DIR__.'/boot.php';
// убеждаемся, что пост-параметр category_id существует, он массив, и в нем есть элементы
if(isset($_POST['category_id']) && is_array($_POST['category_id']) && count($_POST['category_id']) > 0 || isset($_POST['symbol']) && is_array($_POST['symbol']) && count($_POST['symbol']) > 0 || isset($_POST['buyin_symbol']) && is_array($_POST['buyin_symbol']) && count($_POST['buyin_symbol']) > 0)
{
foreach($_POST['category_id'] as $category_id)
{
$stmt = pdo()->prepare("SELECT * FROM 'category' WHERE $category_id VALUE(`name`, `img`, `url`)");
$stmt->execute([
'name' => $category_name,
'img' => $category_img,
'url' => $category_url,
]);
// вставляем категории в промежуточную таблицу для хранения выбранных категорий
$stmt = pdo()->prepare("INSERT INTO `freeroll` (`name_turnament`, `prize`, `password`, `data`, `time`, `category_id`, `prize_symbol`, `buyin` , `buyin_symbol`, `category_name`, `category_img`, `category_url`) VALUES (:name_turnament, :prize, :password, :data, :time, :category_id, :prize_symbol, :buyin, :buyin_symbol, :category_name, :category_img, :category_url)");
$stmt->execute([
'name_turnament' => $_POST['name_turnament'],
'prize' => $_POST['prize'],
'password' => $_POST['password'],
'data' => $_POST['data'],
'time' => $_POST['time'],
'category_id' => $category_id,
'prize_symbol' => $_POST['symbol'],
'buyin' => $_POST['buyin'],
'buyin_symbol' => $_POST['buyin_symbol'],
'category_name' => $category_name,
'category_img' => $category_img,
'category_url' => $category_url,
]);
}
pdo('commit'); // все категории вставили, консистентность данных достигнута, можно фиксировать транзакцию
}
else
{
pdo('rollback'); //нет выделенных категорий, если они обязательны, то нужно откатить вставку записи в таблицу faucets. Если нет, то else нужно не использовать
// генерируем сообщение об ошибке, если нужно
}
header('Location: addfreerolls');
но получаю ошибку
[14-Mar-2023 21:37:34 UTC] PHP Notice: Undefined variable: category_name in /do_addfreerolls.php on line 14
[14-Mar-2023 21:37:34 UTC] PHP Notice: Undefined variable: category_img in /do_addfreerolls.php on line 15
[14-Mar-2023 21:37:34 UTC] PHP Notice: Undefined variable: category_url in /do_addfreerolls.php on line 16
[14-Mar-2023 21:37:34 UTC] PHP Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''category' WHERE 1 VALUE(`name`, `img`, `url`)' at line 1 in /home/bubbmxyq/public_html/poker/freerolls/admins/do_addfreerolls.php:16
Stack trace:
#0 /do_addfreerolls.php(16): PDOStatement->execute(Array)
#1 {main}
thrown in /do_addfreerolls.php on line 16