我知道这个标题听起来很荒谬,但我已经做了几个小时的研究,只是发现 PDO 最终是有缺陷的,没有明显的解决方案……我致力于为一个开放的人。我也愿意接受我的代码有缺陷。
使用 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);
它工作,有点。这是 Spartanic 的疯狂部分:五分之一的刷新相同的数据被传递,PDO 给出了这个错误:
TEXT: SQLSTATE[HY093]: Invalid parameter number
是随机的!如何以及为什么?