Я, наверное, упускаю что-то простое здесь. Я пытаюсь динамически заполнить операторы 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.
Задача ещё не решена.
Других решений пока нет …