【发布时间】:2014-04-02 20:26:09
【问题描述】:
我在将 SQL 查询从 mysql 转换为 PDO 准备语句时遇到了麻烦。如下,用于计算存储在会话中的坐标(用户位置)与数据库中的坐标之间的距离,以及是否在用户确定的半径内:
$query = "
SELECT
*
FROM
first_page_data
WHERE
((((acos(sin((".$_SESSION['alat']."*pi()/180)) *
sin(('geo_lat1'*pi()/180))+cos((".$_SESSION['alat']."*pi()/180)) *
cos(('geo_lat1'*pi()/180)) * cos(((".$_SESSION['alon']."- 'geo_lon1') *
pi()/180))))*180/pi())*60*1.1515) * (1.609344/1000)) < ".$_SESSION['aradius'];
我想将会话变量、geo_lat 和 geo_lon 变量更改为占位符,以便我可以将值绑定到它们,但我一辈子都无法让它工作!
我什至不知道如何查看我的进展情况,因为一旦我用占位符替换了上面的变量(我一直在使用未命名的问号占位符)然后将值绑定到它们,我不知道如何从中检索已编译的查询$stmt 在我执行之前:
$stmt = db->prepare($query);
$stmt->bindValue(1, $_SESSION['alat'], PDO::PARAM_STR);
**more bindings**
$stmt->execute();
【问题讨论】:
-
请向我们展示您尝试过的确切代码,然后告诉我们您尝试后会发生什么。
-
为什么要在执行查询之前检索编译好的查询?
-
然后进行更改。我建议使用 names 作为占位符。使用占位符,您不会看到“带有值的查询”。万岁!