gpt4 book ai didi

mysql - 使用 PDO 将变量插入 SELECT 子句?

转载 作者:行者123 更新时间:2023-11-30 01:36:23 25 4
gpt4 key购买 nike

我正在尝试使用余弦球面定律来获取存储在 MySQL 数据库中的用户到每个地点的距离。用户输入他们的位置,然后执行以下查询。

$data = array(':lat' => $lat, ':lon' => $lon);

$qry = "SELECT ACOS(SIN(v.Latitude) * SIN(:lat) + COS(v.Latitude) * COS(:lat) * COS(:lon - v.Longitude)) * 3963 AS distance FROM Venue v";

$stmt = $pdo->prepare($qry);
$stmt->execute($data);
$rows = $stmt->fetchAll();

问题是,我收到以下错误。

PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number'

当我从 SELECT 子句中删除变量(:lat:lon)时,它工作得很好。语句中的其他变量(此处未显示)工作得很好,只有 SELECT 子句中的变量会导致问题。无法在 SELECT 子句中使用 PDO 变量是 PDO 的限制吗?或者有办法解决这个问题吗?

我使用的是 PHP 5.4.15,我的 PDO 选项如下。

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND   => 'SET NAMES utf8',        // UTF-8 to prevent issue sending special characters with JSON
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // fire exceptions for errors (turn this off for release)
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // only return results indexed by column name
PDO::ATTR_EMULATE_PREPARES => false // actually prepare statements, not pseudo-prepare ( http://stackoverflow.com/questions/10113562/pdo-mysql-use-pdoattr-emulate-prepares-or-not )
);

最佳答案

$data = array($lat, $lat, $lon);

$qry = "SELECT ACOS(SIN(v.Latitude) * SIN(?) + COS(v.Latitude) * COS(?) * COS(? - v.Longitude)) * 3963 AS distance FROM Venue v";

$stmt = $pdo->prepare($qry);
$stmt->execute($data);
$rows = $stmt->fetchAll();

关于mysql - 使用 PDO 将变量插入 SELECT 子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16821846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com