我有一個PDO綁定參數的問題,當它在數據庫上執行時,所設置的參數沒有被推入到查詢中。我通過讓MySQL將查詢記錄到文件來目擊此事。PHP PDO bindParam返回NULL
如果我對服務器執行 - 我在日誌文件中看到這個。
-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();
下面有我的表
CREATE TABLE `location_geo` (
`locID` int(11) unsigned NOT NULL,
`latitude` double DEFAULT NULL,
`longitude` double DEFAULT NULL,
PRIMARY KEY (`locID`)
)
僞數據執行
INSERT INTO `location_geo` (`locID`, `latitude`, `longitude`)
VALUES
(1, 53.21333, -2.4354014),
(2, 53.213435, -2.4345214);
我試圖更換bindParams和將數據放入一個數組中執行呼叫內然而結果是相同的。
如果您錯過了,緯度和經度的值將保持爲空。沒有來自PDO的錯誤。
奇怪。
不幸的是這不會產生任何東西在屏幕上或在日誌中。謝謝無論如何。 – 2012-04-21 23:07:05
嘗試將其設置爲一個級別highr:PDO :: ERRMODE_EXCEPTION – Mads 2012-04-21 23:09:10