mysql — PHP: PDO, динамическое bindValue

Я, наверное, упускаю что-то простое здесь. Я пытаюсь динамически заполнить операторы bindValue. Из того, что я могу сказать, они работают до тех пор, пока не достигнут набора кода, который извлекает пары ключ и значение из динамически генерируемого набора аспектов.

Массив значений привязки ($ pdokeys) выглядит следующим образом перед выполнением:

Array ( [:icapabilites1] => Bridges [:icapabilites2] => Transit and Rail [:icapabilites3] => Roads )

Код для bindValues ​​выглядит следующим образом:

try {
//$dbh is an existing pdo connection

$stmt2 = $dbh->prepare($sql);

foreach($pdokeys as $key => $value){
if(is_numeric($value)){ $param = PDO::PARAM_INT; }
elseif(is_bool($value))   { $param = PDO::PARAM_BOOL; }
elseif(is_null($value))   { $param = PDO::PARAM_NULL; }
elseif(is_string($value)) { $param = PDO::PARAM_STR; }
else { $param = FALSE;}

echo "bindValue($key, $value, $param)<br/>";

if($param){$stmt2->bindValue($key, $value, $param);}}

$stmt2->execute();
//if results do stuff here...
} catch (PDOException $search) {
echo $sql."<br/><br/>";
echo 'Connection failed line for search2: ' . $search2->getMessage();
}

Основываясь на записи pind bindvalue непосредственно перед привязкой значений, кажется, что bindValue завершается ошибкой, когда я пытаюсь связать первый фасет: icapabilities1.

Вывод выглядит так.

bindValue(:icapabilites1, Bridges, 2)SELECT * FROM careers WHERE scrapetime='1234567' AND ( capabilities= :icapabilities1 OR capabilities= :icapabilities2 OR capabilities= :icapabilities3 ) AND external_posted='Posted' ORDER BY last_updated desc;

Connection failed line for search2: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

Фасеты добавляются в массив $ pdokeys, который я использую для создания PDO bindArray следующим образом:

foreach($capabilities as $key => $value){
$thiskey = ":icapabilites".(intval($key)+1);
$pdokeys[$thiskey] = $capabilities[$key];
}

Если у меня есть другие элементы массива в $ pdokeys перед icapabilities1, эти bindValues, кажется, работают (я получаю все операторы echo вплоть до bindVal icapabilities1), поэтому я предполагаю, что это должно быть что-то с тем, как я m создание или передача возможности bindValue.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector