PDO Несколько вложений SQLite с подзапросом

EDIT: я опубликовал новый вопрос (а не редактирование), поскольку контент и код, которые я пробовал, очень длинны и означают, что это полностью заменит этот вопрос.

Я работаю над INSERT несколько строк в таблицу SQLite с использованием PDO, но у меня возникли проблемы с выполнением моего запроса с использованием связанных параметров. У меня есть три таблицы со схемой:

столбцы schoolB_equivalencies:

  • analogency_id INTEGER ПЕРВИЧНЫЙ КЛЮЧ АВТОИНКРИЕМ
  • schoolA_id INTEGER NOT NULL
  • schoolB_id INTEGER NOT NULL
  • is_archived INTEGER NOT NULL
  • FOREIGN KEY (schoolA_id) ССЫЛКИ schoolA_courses (id)
  • FOREIGN KEY (schoolB_id) ССЫЛКИ schoolB_courses (id)

столбцы для schoolA_courses:

  • schoolA_courses id INTEGER ПЕРВИЧНЫЙ КЛЮЧ АВТОИНКРИЕМ
  • course_prefix ТЕКСТ
  • course_number INTEGER
  • … другие поля

столбцы для schoolB_courses:

  • schoolB_courses id INTEGER ПЕРВИЧНЫЙ КЛЮЧ АВТОИНКРИЕМ
  • course_prefix ТЕКСТ
  • course_number INTEGER
  • … другие поля

Я пытаюсь сделать сразу несколько вставок с помощью prepare() , массива значений и подзапроса. Запуск INSERT однажды работает (одна строка вставлена):

 $dir = 'sqlite:/path/to/courses.sqlite3'; $dbh = new PDO($dir) or die("error"); $stmt = $dbh->prepare('INSERT INTO schoolB_equivalencies (schoolA_id, schoolB_id, is_archived) VALUES ( (SELECT id from schoolA_courses WHERE course_number="103" AND course_prefix="RPED"), (SELECT id from schoolB_courses WHERE course_number="251" AND course_prefix="ARCH"),0)'); $stmt->execute(); 

Однако, когда я включаю один и тот же оператор с использованием связанных параметров и массива значений, строки не вставлены:

 $dir = 'sqlite:/path/to/courses.sqlite3'; $dbh = new PDO($dir) or die("error"); $selections = array( 0 => array( 0 => "RPED", // THE schoolA COURSE PREFIX 1 => "103", //THE schoolA COURSE NUMBER 2 => "ARCH", //THE schoolB COURSE PREFIX 3 => "251" //THE schoolB COURSE NUMBER ), 1 => array( 0 => "RPED", // THE schoolA COURSE PREFIX 1 => "126", //THE schoolA COURSE NUMBER 2 => "ARCH", //THE schoolB COURSE PREFIX 3 => "261" //THE schoolB COURSE NUMBER ) ); $stmt = $dbh->prepare('INSERT INTO schoolB_equivalencies (schoolA_id, schoolB_id, is_archived) VALUES ( (SELECT id from schoolA_courses WHERE course_number=:schoolA_code AND course_prefix=:schoolA_prefix), (SELECT id from schoolB_courses WHERE course_number=:schoolB_code AND course_prefix=:schoolB_prefix),0)'); foreach ( $selections as $selection ): $stmt->bindParam(':schoolA_number', $selection[1]); $stmt->bindParam(':schoolA_prefix', $selection[0]); $stmt->bindParam(':schoolB_number', $selection[3]); $stmt->bindParam(':schoolB_prefix', $selection[2]); $stmt->execute(); print_r($dbh->errorInfo()); endforeach; 

Результат error_info() показывает код 0000 на обеих вставках, который выглядит как индикатор успеха, но строки не вставлены. Основываясь на том, что работает один INSERT и что error_info() сообщает об успехе, я предполагаю, что что-то не так с тем, как я привязываю параметры.

Для начала … Разве это не должно быть

 $stmt->bindParam(':schoolA_number', $selection[0][1]); $stmt->bindParam(':schoolA_prefix', $selection[0][0]); $stmt->bindParam(':schoolB_number', $selection[0][3]); $stmt->bindParam(':schoolB_prefix', $selection[0][2]); 

ИЛИ

 $stmt->bindParam(':schoolA_number', $selection[1][1]); $stmt->bindParam(':schoolA_prefix', $selection[1][0]); $stmt->bindParam(':schoolB_number', $selection[1][3]); $stmt->bindParam(':schoolB_prefix', $selection[1][2]); 

ИЛИ

 foreach ( $selections as $selection ) { $stmt = $dbh->prepare('INSERT INTO schoolB_equivalencies (schoolA_id, schoolB_id, is_archived) VALUES ( (SELECT id from schoolA_courses WHERE course_number=:schoolA_code AND course_prefix=:schoolA_prefix), (SELECT id from schoolB_courses WHERE course_number=:schoolB_code AND course_prefix=:schoolB_prefix),0)'); $stmt->bindParam(':schoolA_number', $selection[1]); $stmt->bindParam(':schoolA_prefix', $selection[0]); $stmt->bindParam(':schoolB_number', $selection[3]); $stmt->bindParam(':schoolB_prefix', $selection[2]); $stmt->execute(); print_r($dbh->errorInfo()); } 

И НЕ

 foreach ( $selections as $selection ) { $stmt->bindParam(':schoolA_number', $selection[1]); $stmt->bindParam(':schoolA_prefix', $selection[0]); $stmt->bindParam(':schoolB_number', $selection[3]); $stmt->bindParam(':schoolB_prefix', $selection[2]); $stmt->execute(); ... }