PHP mySQL 查询忽略十进制值

标签 php mysql sql select floating-point

我正在使用 AJAX 根据输入中包含的值从数据库中提取某些股票。这些值之一是平均返回,它包含一个小数值。

我有两个变量,$min_returns$max_returns,分别保存 46.6 等值(通常持有 AJAX 返回)。

PHP代码:

SELECT avgreturns 
FROM stocks 
WHERE avgreturns >= '$min_returns' AND avgreturns <= '$max_returns'

在数据库中,值将从 0.3 到 4.6 等。

我遇到的问题是小数点也可能不存在。例如,1.3 将被评估为 13,这不会包含在我上面的示例中。整数,如 5,被正确读取并包含在上面。

我是 PHP 和 mySQL 的新手。我在数据库中做错了什么,需要将列设置为正确的设置吗?我知道从查询中调用的所有内容都作为字符串返回,但是没有任何方法可以在查询中转换它,是吗?

如果可能的话,我想避免四舍五入我的数据库中的值。

最佳答案

单引号表示字符串文字,因此您强制数据库按字典顺序比较值。为了用数字解释它们,只需去掉引号:

SELECT avgreturns 
FROM   stocks 
WHERE  avgreturns >= $min_returns AND avgreturns <= $max_returns

强制警告:
使用字符串操作来创建查询通常不是一个好主意,这会使您容易受到 SQL 注入(inject)攻击。您可能应该使用 prepared statement相反。

关于PHP mySQL 查询忽略十进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29874577/

相关文章:

php - Laravel Eloquent 错误地更新每一行值

mysql - 优化 MySQL 导入(将详细的 SQL 转储转换为快速的一个/使用扩展插入)

php - 如何使用sql结果中的值作为其子查询的表名?

sql - 如何在SQL中选择3列并进行COUNT个INNER JOIN并将其显示为3列,但没有重复信息

sql - 设置外键时的奇怪问题

mysql - 使用 TIMESTAMP 数据类型选择特定日期的行

php - 在 list.phtml 中显示产品属性 - Magento

php - 仅获取 Group By 返回的最高值

php - PDO 错误 - PDOException',消息为 'SQLSTATE[HY000]: General error'

php - 使用 $_GET 中的多个变量来更改页面布局和 MySQL 结果