Вставить несколько строк, используя подготовленный оператор

0

Я пытаюсь использовать подготовленный запрос оператора, чтобы вставить несколько строк в таблицу. Мне нужно получить 2 значения из второй таблицы и вставить их вместе с 3 параметрами.

MySQL видит только суб-запрос как одно значение, а не извлекаемое 2, поэтому просит добавить дополнительный параметр, поскольку присутствует только четыре.

$stmt = $mysqli->prepare("INSERT INTO tbl_permit_daily_sign_off (permit_id, shift, employee_id, sign_off_date, type)
                              VALUES ((SELECT tbl_permit_project.permit_id, tbl_shifts.shift_name FROM tbl_permit_project
                              INNER JOIN tbl_shifts ON tbl_permit_project.project_id = tbl_shifts.project_id
                            WHERE tbl_shifts.end_time <= NOW()), ?, ?, ?)");
$stmt->bind_param("iss",  $permit_employee = 0, $today, $type = "auto");
$stmt->execute();
$stmt->close();
  • 0
    $type = 'auto' в качестве параметра нерегулярен, насколько PHP идет. Эта переменная не имеет значения, просто передайте 'auto' напрямую.
Теги:
prepared-statement
sql-insert

1 ответ

1

Вам нужна INSERT... SELECT форма вставки, а не форма INSERT... VALUES().

INSERT INTO tbl_permit_daily_sign_off 
            (permit_id, shift, employee_id, sign_off_date, type)
     SELECT tbl_permit_project.permit_id, tbl_shifts.shift_name  
      FROM tbl_permit_project
INNER JOIN tbl_shifts ON tbl_permit_project.project_id = tbl_shifts.project_id
     WHERE tbl_shifts.end_time <= NOW()), ?, ?, ?)

Как это работает?

1) вы создаете запрос SELECT с указанием столбцов, которые вы хотите использовать в запросе INSERT. Затем вы проверите и устраните неисправность.

2) Вы помещаете INSERT INTO tbl (col, col, col...) прямо перед вашим SELECT.

Ваш INSERT выбирает столбцы (permit_id, shift, employee_id, sign_off_date, type) но ваш SELECT упоминает только два из этих столбцов. Вам нужен SELECT, чтобы упомянуть все пять.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню