ВЫБОР нескольких строк с помощью массива, а затем ВСТАВКА в другой оператор

#php #mysql

#php #mysql

Вопрос:

Я пытаюсь ВЫБРАТЬ данные из одной таблицы на основе идентификатора, а затем вставить возвращенные данные в другую таблицу.

Мой код:

 <?php
    require '../../db-config.php';

    if(isset($_POST['course'])) {
        $selected_courses = '('. implode(',', $_POST['course']) .')';
        $status = 'Live';
        $active = 'Y';

        $stmt = "SELECT id, coursetitle FROM courses WHERE id IN ". $selected_courses ." 
                 AND status = ?";
        $stmt = $conn->prepare($stmt);
        $stmt->bind_param('i', $selected_courses);
        $stmt->execute();
        $stmt->bind_result($id, $coursetitle);

        while($stmt->fetch()) {
            $stmt = $conn->prepare("INSERT INTO distributor_course_settings
                                  (id, active, coursetitle) VALUES (?, ?, ?)");
            $stmt->bind_param("iss", $id, $active, $coursetitle);
            $stmt->execute();
        }
    }
?>
  

Ошибка, которую я получаю, такова: PHP Fatal error: вызов функции-члена
bind_param() для boolean

Что не так с моим кодом?

Комментарии:

1. что такое $stmt->bind_result($id, $coursetitle); ? Это после инструкции execute?

Ответ №1:

вы можете выполнить оба действия (select и insert) в одном запросе. Что-то вроде этого:

 INSERT INTO distributor_course_settings
(id, distributor, active, coursetitle) 
SELECT id, '$distributer', 'Y', coursetitle 
FROM courses 
WHERE id IN ". $selected_courses ." 
AND status = 'Live'
  

значения в инструкции select могут быть любыми, например string, php variable или подвыборкой statment, например:

    INSERT INTO distributor_course_settings
    (id, distributor, active, coursetitle) 
    SELECT id, (select distributer from distributor_course_settings where id = 12), 'Y', coursetitle 
    FROM courses 
    WHERE id IN ". $selected_courses ." 
    AND status = 'Live' 
  

и если это переменная php, ваш оператор может выглядеть следующим образом:

  $stmt = "INSERT INTO distributor_course_settings
    (id, distributor, active, coursetitle) 
    SELECT id, '".$distributor."', 'Y', coursetitle 
    FROM courses 
    WHERE id IN ". $selected_courses ." 
    AND status = 'Live'" 
  

Комментарии:

1. Это работает, но в таблице distributor_course_settings есть столбец distributor, и я хочу вставить в него переменную $distributor, как бы мне это тоже сделать?

2. Ну, на данный момент я вставляю только в 3 столбца в distributor_course_settings, мне нужно вставить данные и в столбец distributor.

3. Я обновил свой ответ, но ответ на ваш вопрос зависит от того, откуда берется значение distributer: в переменной или просто строке, или из другого запроса…

4. Это установленная переменная $distributor = «Company», которая устанавливается в верхней части страницы.