ここではおそらく単純なものが欠けています。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();
}
値をバインドする直前に pdo bindvalue を書き出すことに基づいて、最初のファセット :icapabilities1 をバインドしようとすると bindValue が失敗するように見えます。
出力は次のようになります。
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
ファセットは、次の方法で PDO bindArray を作成するために使用している $pdokeys 配列に追加されます。
foreach($capabilities as $key => $value){
$thiskey = ":icapabilites".(intval($key)+1);
$pdokeys[$thiskey] = $capabilities[$key];
}
icapabilities1 の前の $pdokeys に他の配列要素がある場合、それらの bindValues は機能しているように見えます (bindVal icapabilities1 までのすべてのエコー ステートメントを取得します)。 m 機能 bindValue ステートメントを作成または渡す。