我有一个与项目设计书具有约束力的参数有关的问题,所设定的参数在数据库上执行时没有被推入询问。 我亲眼目睹了这一情况,把问询记录到档案中。
如果我对服务器投射,我就看到这一点。
SELECT sg.locID, ( 3959 * acos( cos( radians(53.21333) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-2.4354014) ) + sin( radians(53.21333) ) * sin( radians( latitude ) ) ) ) AS distance FROM location_geo sg HAVING distance < 1000 ORDER BY distance LIMIT 0 , 20
PHP/PDO
SELECT
sg.locID,
( 3959 * acos( cos( radians(NULL) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(NULL) ) + sin( radians(NULL) ) * sin( radians( latitude ) ) ) ) AS distance
FROM
location_geo sg
HAVING
distance < 1000
ORDER BY distance LIMIT 0, 20
这里是PHP实施的法典。
$lat = 53.21333;
$lng = -2.4354014;
$limit = 10;
$start = 0;
$query = "
SELECT
sg.locID,
( 3959 * acos( cos( radians(:latitude) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(:longitude) ) + sin( radians(:latitude) ) * sin( radians( latitude ) ) ) ) AS distance
FROM
location_geo sg
HAVING
distance < :radius
ORDER BY distance LIMIT :start, :limit
";
$stm = Modules::db()->prepare($query);
$stm->bindValue(":radius", 1000, PDO::PARAM_INT);
$stm->bindParam(":latitude", $lat, PDO::PARAM_INT);
$stm->bindParam(":longitude", $lng, PDO::PARAM_INT);
$stm->bindParam(":start", $start, PDO::PARAM_INT);
$stm->bindParam(":limit", $limit, PDO::PARAM_INT);
$stm->execute();
Heres my table
CREATE TABLE `location_geo` (
`locID` int(11) unsigned NOT NULL,
`latitude` double DEFAULT NULL,
`longitude` double DEFAULT NULL,
PRIMARY KEY (`locID`)
)
Dummy数据 ——
INSERT INTO `location_geo` (`locID`, `latitude`, `longitude`)
VALUES
(1, 53.21333, -2.4354014),
(2, 53.213435, -2.4345214);
我已尝试将捆包巴拉姆替换成一个阵列,并在执行呼吁中将数据放在一个阵列中,但结果相同。
如果你错失,纬度和长度的数值仍然无效。 PDO没有错误。
Weird。