首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我将我的PHP MySQL语句更改为准备语句,并将小数点从句点改为逗号。

我将我的PHP MySQL语句更改为准备语句,并将小数点从句点改为逗号。
EN

Stack Overflow用户
提问于 2022-09-26 20:19:35
回答 2查看 63关注 0票数 1

我有一个带有浮动的MySQL表。在PHPMyAdmin中,它们被列为例如"55.123“

我以前经常用

代码语言:javascript
复制
$sql = "SELECT latitude,longitude FROM table WHERE id=" . $id;
$conn->query($sql);

当我打印我的浮标时,我会得到例如"55.123“--这一点也不奇怪。出于明显的原因,我需要将此查询更改为准备好的语句:

代码语言:javascript
复制
$sql = "SELECT latitude,longitude FROM table WHERE id=?;";
$stmt = $conn->prepare($sql);
$stmt->bind_param("i",$id);
$stmt->execute();

现在,当我打印我的浮点数时,我得到例如"55,123“--用逗号代替句号。

我想我的

代码语言:javascript
复制
setlocale(LC_ALL, 'da_DK.utf8');

可能和这事有关,但我真的不知道该怎么做。因为要么我应该停止将查询更改为准备好的语句,要么我应该将浮点数转换为字符串并用句点替换逗号。这两种解决方案都不太理想。有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-27 12:18:59

这意味着您使用的是PHP的旧版本。在PHP8.0之前,地区设置影响了将浮点数转换为字符串。这意味着,如果您有一个浮点数,并且使用了类似于echo的东西输出它,那么对于使用,作为小数分隔符的区域设置,向string的转换将替换为,。例如:

代码语言:javascript
复制
setlocale(LC_ALL, "de_DE.UTF-8");
$number = 42.42;
echo $number; // outputs 42,42 in PHP 7

一旦升级到PHP 8或更高版本,无论区域设置如何,输出都应该是相同的。

至于为什么mysqli中的准备查询和非准备查询有区别:mysqli准备语句在与数据库对话时使用二进制协议(而不是文本协议)。这意味着来自MySQL的数据已经是一个整数、浮点数或字符串。在默认情况下,将不对字符串进行强制转换。毕竟,这样做有什么意义呢?但是为了使文本协议与二进制协议兼容,添加了一个选择设置,要求PHP将数字字符串自动转换为PHP本地整数和浮动。您可以在任何时候通过调用:

代码语言:javascript
复制
$mysqli->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);

二进制协议(准备好的语句)忽略此设置。

我不知道为什么设置是选择而不是选择退出。PHP8.1在PDO中改变了这一点,但在mysqli中没有改变。

票数 1
EN

Stack Overflow用户

发布于 2022-09-26 20:37:09

当您使用准备好的语句时,您还使用了MySQL本机驱动程序(MYSQLND)。当它获取MySQL FLOAT列时,默认情况下它会以PHP而不是字符串的形式返回它们。因此,在格式化它们时使用PHP的区域设置。

这是由选项MYSQLI_OPT_INT_AND_FLOAT_NATIVE控制的。您可以像以前一样取消设置以获得字符串。

代码语言:javascript
复制
$conn->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, false);

注意,这必须在创建mysqli对象和连接到服务器之间调用。所以你不能使用new mysqli,你必须调用mysqli_init()$conn->real_connect()

代码语言:javascript
复制
$conn = mysqli_init();
$conn->options(MYSQLI_OPT_INT_AND_FLOAT_NATIVE, true);
$conn->real_connect('server', 'user', 'pass', 'database');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73859546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档