タイトルがばかげているように聞こえることは知っていますが、何時間も調査を行った結果、PDO は最終的にバグがあり、明確な解決策がないことがわかりました...私は 1 つを開くことに専念しています。また、私のコードに欠陥があることも受け入れます。
PHP 5.2/Ubuntu を使用すると、このコードは機能します (準備済みステートメントを使用しない/インジェクション可能):
$sql ="SELECT COUNT(*) FROM property p
INNER JOIN property_attribute pa ON p.property_id = pa.property_id
INNER JOIN property_area pc ON p.property_id = pc.property_id
WHERE pa.attribute_value_id
IN (
SELECT av.attribute_value_id
FROM attribute_value av
INNER JOIN attribute a ON av.attribute_id = a.attribute_id
WHERE a.name LIKE '$attributes'
AND av.value LIKE '$values'
)
ORDER BY p.price ASC";
$params = array();
$rHowManyPages = Listings::HowManyPages($sql, $params);
ただし、PDO のすばらしい準備済みステートメントを使用すると、次のようになります。
$sql ='SELECT COUNT(*) FROM property p
INNER JOIN property_attribute pa ON p.property_id = pa.property_id
INNER JOIN property_area pc ON p.property_id = pc.property_id
WHERE pa.attribute_value_id
IN (
SELECT av.attribute_value_id
FROM attribute_value av
INNER JOIN attribute a ON av.attribute_id = a.attribute_id
WHERE a.name LIKE :attributes
AND av.value LIKE :values
)
ORDER BY p.price ASC';
$params = array(':attributes' => $attributes, ':values' => $values);
$rHowManyPages = Listings::HowManyPages($sql, $params);
それはちょっと動作します。スパルタニックの狂気の部分は次のとおりです。渡される同じデータの 5 回の更新に 1 回、PDO は次のエラーを返します。
TEXT: SQLSTATE[HY093]: Invalid parameter number
ランダムです!方法と理由?