inilim2
@inilim2
Intern PHP

Ошибка PDO при работе с SQLite?

Когда делаю многочисленные запросы за раз, PDO всегда ругается что количество параметров не совпадают. Но если делать одиночные запросы, то все ок.
$PDO = new \PDO(
   'sqlite:' . L_INIL_DB::$pathToFileDB,
   null,
   null,
);
$query = 'INSERT INTO table (idGame, idChannel, dateU) VALUES (:iG1, :iC1, :dU1); INSERT INTO table (idGame, idChannel, dateU) VALUES (:iG2, :iC2, :dU2);';



$stm = $PDO->prepare($query);
$a1 = 111;
$a2 = 444;
$stm->bindParam(':iG1', $a1, PDO::PARAM_INT);
$stm->bindParam(':iC1', $a1, PDO::PARAM_INT);
$stm->bindParam(':dU1', $a1, PDO::PARAM_INT);
$stm->bindParam(':iG2', $a2, PDO::PARAM_INT);
$stm->bindParam(':iC2', $a2, PDO::PARAM_INT);
$stm->bindParam(':dU2', $a2, PDO::PARAM_INT);

$stm->execute();


Ошибка:
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 25 column index out of range in
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
@rPman
наверное нельзя в sqlite внутри запроса ; использовать?
если тебе надо ускорить вставку, используй транзакции, перед вставкой кучи строк $PDO->beginTransaction() а после соответственно $PDO->commit();

Если же действительно надо именно одним запросом несколько insert, попробуй вместо кучи insert написать один, вставляющий результат следующего селекта, а он уже в свою очередь собирай с помощью union all селекты с константами::
INSERT INTO table (idGame, idChannel, dateU)
SELECT :iG1, :iC1, :dU1
UNION ALL
SELECT :iG2, :iC2, :dU2
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Adamos
@Adamos
INSERT INTO table (idGame, idChannel, dateU) VALUES (:iG1, :iC1, :dU1), (:iG2, :iC2, :dU2)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽