PDO выполнить массив для преобразования строки

Я получаю массив, чтобы преобразовать ошибку преобразования, когда я пытаюсь запустить выполнение PDO. Исполнение должно вводить одно, являющееся нормальной строкой, а другое – массивом. Вот мой код:

$id = "1"; $array = array("a", "b", "c"); $in = str_repeat('?,', count($array) - 1) . '?'; $sql1 = "SELECT * FROM tbl1 AS tb1 RIGHT JOIN tbl2 AS tb2 ON (tb1.e_id = tb2.e_id)LEFT JOIN tbl3 AS tb3 ON (tb2.m_id = tb3.m_id) WHERE tb1.u_id = ? AND tb1.letters IN ($in)"; $statement1 = $db_handle->prepare($sql1); $statement1->setFetchMode(PDO::FETCH_ASSOC); $statement1->execute(array($id,$array)); $res = $statement1->fetchAll(); 

Таким образом, строка выполнения дает мне ошибку преобразования строки. Я напечатал свой массив и вопросительные знаки, и они выдают отлично. Заявление sql также прекрасно, я пробовал его на phpMyAdmin, и он работает просто отлично, поэтому я не использую выполнение правильно, но я не уверен, как изменить способ его выполнения.

Может кто-нибудь объяснить это мне?

execute() ожидает единственный массив. Из документации:

Выполните подготовленное заявление. Если подготовленное заявление содержит маркеры параметров, вы должны либо:

  • (Надрез)
  • передать массив значений параметров только для ввода

С array($id,$array) вы должны передать многомерный массив, который выглядит так:

 Array ( [0] => 1 [1] => Array ( [0] => a [1] => b [2] => c ) ) 

Это, конечно, не то, что он ожидает. Он нуждается в одномерном массиве, содержащем значения, которые нужно вставить.

Чтобы исправить эту проблему, вам необходимо изменить формат массива. Добавьте идентификатор в начало массива, например:

 $array = array(1, "a", "b", "c"); 

Если переменная ID генерируется динамически, вы можете вручную добавить ее в начало массива с помощью функции array_unshift() :

 $id = "1"; $array = array("a", "b", "c"); $array = array_unshift($array, $id); 

… и затем изменить вызов execute() следующим образом:

 $statement1->execute($array); 

->execute() ожидает, что вы отправите ему массив с каждым элементом, представляющим каждый ? в запросе.

Вы отправляете только два элемента, так что он попытается использовать весь массив как второй ? , поэтому он пытается преобразовать его в строку. И тогда он, вероятно, будет жаловаться на отсутствие достаточных параметров.

Попробуйте вот так:

 $dataArray = $array; array_unshift($dataArray, $id); $statement1->execute($dataArray);