2010-08-25 3 views
0

Если необходимо выполнить несколько запросов. Некоторые из параметров перекрываются, некоторые - нет.Array имеет больше параметров, чем подготовленный оператор PDO вызывает ошибку

Я хотел создать один массив, содержащий данные для всех параметров для всех запросов.

Я решил, что если массив содержит значения, которые подготовили заявление не было бы игнорировать их, но его давая мне эту ошибку:

Invalid parameter number: number of bound variables does not match number of tokens

вот что я имею в виду:

$data = array('a' => $a, 'b' => $b, 'c' => $c, 'd' => $d); 

$data['e'] = "e"; 
$STH = $this->PDO->prepare("INSERT INTO table1 (fieldA, fieldB, fieldE) VALUES (:a, :b, :e)"); 
$STH->execute($data); 

$data['f'] = "f"; 
$STH = $this->PDO->prepare("INSERT INTO table2 (fieldA, fieldD, fieldF) VALUES (:a, :d, :f)"); 
$STH->execute($data); 

ли есть способ разрешить это? или нужно создавать разные массивы каждый раз?

+0

примечание: сообщение об ошибке указывает, что PDO использует эмулированные подготовленные операторы. Если вы используете PDO_MYSQL, это значение по умолчанию, так как php 5.1.something. Причина, по-видимому, заключалась в том, что MySQL не использовал кеш запросов для подготовленных операторов до версии сервера 5.1.17. Если вы используете сервер> = 5.1.17, вам может потребоваться установить «PDO :: ATTR_EMULATE_PREPARES» в 0 - в зависимости от того, как вы фактически используете инструкции. – VolkerK

ответ

0

Нет, это не поддерживается.

BTW, когда дело доходит до поддержания, я всегда чувствовал, что использование метода bindParam приводит к гораздо более читаемому коду. Как это ...

$STH = $this->PDO->prepare("INSERT INTO table1 (fieldA, fieldB, fieldE) VALUES (:a, :b, :e)"); 
$STH->bindParam(':a', 'a'); 
$STH->bindParam(':b', 'b'); 
$STH->bindParam(':e', 'e'); 
$STH->execute(); 
+0

Nit-picking: 'a:' должно быть ': a', то же самое для' b: 'и' c: '... – VolkerK

+0

спасибо - исправлено. – rgroli

Смежные вопросы