php - SQL bigint 数据类型被 gettype() 视为字符串;功能。为什么?
问题描述
1)我想了解为什么存储的数字数据与我在 php.ini 中调用时bigint
一样。'string'
gettype();
2)是否有一个函数,如is_bigint();
php,可以检查变量是否为bigint。
3)当它是 bigint 时,我如何检查数据类型作为乘以 1 或将 0 添加到与数字和字母混合的字符串将重新运行'Notice: A non well formed numeric value encountered in line 2'
并调用gettype();
现在相乘的数据类型将返回:integer
解决方案
简单的答案是 PHP 没有 bigint 类型。数据库驱动程序或您从中获取该值的任何地方都将您的数据作为字符串提供给您,因为这是表示该值的唯一可靠方式。
在 64 位系统上,PHP 的 int 类型应该是有符号的 64 位整数;但在 32 位系统上,它将是 32 位的,因此您的值不适合。您可以通过回显PHP_INT_MAX
内置常量来仔细检查,它为您提供了可以在 PHP 构建中以整数形式存储的最大值。
要判断该值是否全为数字,您可以使用ctype_digit($value)
,但这不适用于负数,因为-
它不是数字。我知道的最好方法是使用正则表达式,例如preg_match('/^-?[0-9]+/', $value)
.
如果您的值适合(即介于PHP_INT_MIN
and之间PHP_INT_MAX
),您可以使用 or 将字符串转换为整数,无需使用(int)$value
or之类的技巧。intval($value)
+0
*1
如果没有,您需要将它们作为浮点数处理,如果运算结果对于整数来说太大,PHP 会这样做,但这意味着存储它们不精确;或使用任意精度的数学模块,如GMP或BCMath。
推荐阅读
- angular - 如何从 slickgrid 中的自定义组件获取输出?
- c++ - 为什么我不能在 GMP 中使用带有 mpz_t 的向量?
- c++ - 如何在 C++ 中使用 std::filesystem 最好地转到目录的父目录
- android-studio - 将 android studio 更新到 4.0 后,Ionic Capacitor Gradle 构建失败
- ios - 如何使用 AVFoundation 获取 iPhone 相机的焦距
- caching - Google Datastudio 中的数据新鲜度指的是什么?
- javascript - Javascript 上的空 .HTML()
- c# - C#接口和继承的问题
- python - 使用 Series.str.match() 过滤 DataFrame
- amazon-web-services - 如何将 route53 Apex 域注册表指向 CloudFront 分配?