1

ここではおそらく単純なものが欠けています。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 ステートメントを作成または渡す。

4

0 に答える 0