2

以下がパラメーターエラーをスローする理由についてのアイデア。私はSOに関する他のすべての回答を見てきましたが、とにかくそれらのソリューションと同じ方法でこれに取り組んでいますが、これはまだうまくいかないようです. アプリを adodb から pdo に切り替えます。

$possible_keys = implode( ",", $possible_keys_array );

SQL スニペット

WHERE
FIND_IN_SET(table.key,:possible_keys)

$STH = $DBH->prepare( $sql );

$STH->execute( array( $possible_keys ) );

$STH->setFetchMode( PDO::FETCH_ASSOC );

コードのスナップショットを入れただけです。しかし、:possible_keys プレースホルダーを possible_keys 変数の実際のテキストに置き換えると、すべて正常に機能します。とにかく変数は単なる文字列であるため、これが機能しない理由について頭を悩ませています。次のエラーがスローされ続けます。

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

psクエリ全体ではなく、問題であることが証明されている句のみを含めました。私はそれの残りが大丈夫であることを知っています。

4

2 に答える 2

1

名前付きパラメーターを使用していますが、そのようにバインドしていません。名前を指定する必要があります。

$STH->execute(array(':possible_keys' => $possible_keys));
于 2013-02-18T15:05:20.710 に答える
1

1) 名前付きプレースホルダーを使用していますが、非連想配列を渡しています。

疑問符をプレースホルダーとして使用している場合は、次のように配列を渡します。

$STH->execute(array("a", "b", "c"))

名前付きプレースホルダーを使用している場合は、次のように配列を渡します。

$STH->execute(array("name" => "a", "name2" => "b", "name3" => "c"))

編集:私の回答では、最初に、(IN() ステートメントで) 現在ある場所にパラメーターを配置できないと述べました。どうやら、それはうまくいくはずです。

于 2013-02-18T15:06:22.137 に答える