gpt4 book ai didi

php - 什么是 GPS 坐标的最佳 MySQL 数据库格式类型?

转载 作者:搜寻专家 更新时间:2023-10-30 23:10:55 24 4
gpt4 key购买 nike

我有一个脚本可以将纬度和经度插入到 MySQL 数据库中。我已将这些行分配为:

`gpslat` DECIMAL(11,4)  NOT NULL ,
`gpslong` DECIMAL(11,4) NOT NULL ,

出于某种原因,当我传递字符串 gpslat=45.7834gpslong=78.7834 时,我在数据库中获取了一个没有完整字符串的值 gpslat =45.0000gpslong=78.0000

知道为什么这不只是发送完整的值吗?


PHP 添加:

function upload($lat, $long) {

if (gpsData['error']==0) {
$result = query("INSERT INTO gpsTable(gpslat,gpslong) VALUES('%d','%d')",$lat,$long);
}

在这种情况下,我将 $lat$long 值传递为 $lat=45.7834$long= 78.7834

查询函数:

function query() {
global $link;
$debug = false;

//get the sql query
$args = func_get_args();
$sql = array_shift($args);

//secure the input
for ($i=0;$i<count($args);$i++) {
$args[$i] = urldecode($args[$i]);
$args[$i] = mysqli_real_escape_string($link, $args[$i]);
}

//build the final query
$sql = vsprintf($sql, $args);

if ($debug) print $sql;

//execute and fetch the results
$result = mysqli_query($link, $sql);
if (mysqli_errno($link)==0 && $result) {

$rows = array();

if ($result!==true)
while ($d = mysqli_fetch_assoc($result)) {
array_push($rows,$d);
}

//return json
return array('result'=>$rows);

} else {

//error
return array('error'=>'Database error');
}
}

最佳答案

由于您在查询中使用了 %d,并且 PHP 上没有使用该格式的 MySQL 调用(MySQLi 使用 ? 而 PDO 使用实名),我假设您的 query 函数正在使用 sprintf 函数来构建 SQL 查询。 (更新:我从你的更新中看出我是对的。)

根据documentation for sprintf , %d 表示(强调我的):

the argument is treated as an integer, and presented as a (signed) decimal number.

您要使用的正确格式字符串是%f:

the argument is treated as a float, and presented as a floating-point number (locale aware).

(或者,如果您不希望输入是区域设置感知的,请改用 %F。)


(无论如何,如果您从用户(或用户控制的设备)接受此数据,您确实应该使用参数化查询(MySQLiPDO 的文档),而不是滚动您的自己的 SQL 查询生成器。)

关于php - 什么是 GPS 坐标的最佳 MySQL 数据库格式类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20404766/

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