bigint 通过 PDO 截断?

2024-02-06

我遇到了将大整数存储在 a 中的问题BIGINT通过 PDO 在 MySQL 上列

如果我运行这个测试:

$number = "30123456789";
var_dump($number); //prints string(11) "30123456789"

$new_number = (int)$number;
var_dump($new_number); //prints int(30123456789) 

到目前为止,一切都很好...

如果我直接在 MySQL 中运行此 SQL:

update my_table set bigint_field = 30123456789 where id_field = 1

一切正常...

当我尝试通过 PDO 保存该数字时出现问题,我将问题简化为这行代码:

//parameterized query
//update my_table set bigint_field = :bigint_field where id_field = :id_field
$statement->bindValue(":bigint_field", $new_number, PDO::PARAM_INT);

如果可选第三个type参数不存在或等于PDO::PARAM_STR然后该值被保存得很好,如果没有,该值将被截断为 58685709。如果我尝试保存 20288976024,该值将被截断为 0。这里发生了什么

我在 Debian Wheezy x64 上运行 PHP 5.5.33 和 MySQL 5.6.25


我无法重现你的情况。

在 x86 系统上,intval() 已经生成 2147483647 在 64 位系统上一切正常。

将 bigint 值绑定为字符串可能会导致错误的结果,因为值将转换为浮点数并丢失精度。

编辑:事实证明这是一个旧的 libmysql 问题。以这种方式配置 PHP,我能够重现该问题:

$number     = 30123456789;
$new_number = 20288976024;
var_dump($number, $new_number);

$pdo->query("CREATE TEMPORARY TABLE bint_test(i BIGINT unsigned)");

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

$stmt = $pdo->prepare("insert into bint_test values (?)");
$stmt->bindValue(1, $number, PDO::PARAM_INT);
$stmt->execute();
$stmt->bindValue(1, $new_number, PDO::PARAM_INT);
$stmt->execute();

echo json_encode($pdo->query("SELECT * FROM bint_test")->fetchAll());

打印出来

int(30123456789)
int(20288976024)
[{"i":"58685717"},{"i":"0"}

两种可能的解决方案:

  1. (首选)安装php-mysqlnd,无论如何你都必须这样做,因为 mysqlnd 是旧的 libmysql 连接器的新替代品。
  2. 打开仿真模式 - 由 PDO 构建的查询也可以完美运行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

bigint 通过 PDO 截断? 的相关文章

  • php中的条件格式化html表与时间戳比较

    echo table style width 100 tr echo td Order td echo td Destination td echo td Location td echo td Status td echo td Time
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 使用 PHP Selenium Webdriver 单击下拉菜单中的选项?

    我正在使用 PHP Selenium Webdriver 包装器Facebook https github com facebook php webdriver 任何人都可以给我一个如何单击或从选择下拉菜单中选择选项的示例吗 我已经尝试过这
  • MySQL InnoDB 约束不起作用

    我偶然发现 innoDB 约束的奇怪行为 但找不到原因 我有包含数据的表格 下面列出了它们的结构 CREATE TABLE contents id int 10 unsigned NOT NULL AUTO INCREMENT title
  • 获取字符串中的最后一个整数

    我需要隔离包含多个整数的字符串中最新出现的整数 我怎样才能得到23代替1 for lastnum1 text 1 out of 23 lastnum1 this gt getEval eregi replace out of text 你可
  • 来自数据库的 jfreechart 散点图

    如何使用java中的jfreechart绘制mysql数据库表中数据的散点图 我使用过 Swing 库 任何链接都会有帮助 我搜索了谷歌但找不到理解的解决方案 如果您有代码 请提供给我 实际上我确实做了条形图并使用 jfreechart 绘
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • MySQL如何获取unix时间戳的时间差

    我有一个保存值1506947452的变量 需要使用公式从该日期提取分钟 started data now date 但started date采用unix时间戳格式10位int数字 我以ajax形式收到并需要放入mysql查询i试试这个 S
  • 对 SimpleXML 数据进行排序和分组

    我正在对 XML 文件中的出版物数据进行排序和分组 我目前使用的方法效果很好大部分情况下 尽管我觉得有一种更有效的方法来完成我想要完成的任务 以下是目标节点的示例
  • 重写 URL,将 ID 替换为查询字符串中的标题

    我对 mod rewrite 很陌生 但我做了一些搜索 但找不到这个问题的答案 我有一个网站 它只有一个 PHP 页面 根据查询字符串中传递给它的 ID 提供数十页内容 我想重写 URL 以便此 ID消失并替换为从数据库中提取的页面标题 例
  • PHP print_r() 中 _r 的含义是什么?

    我见过这个答案 https stackoverflow com questions 13103410 what does r suffix mean就这样 但我不确定它对于 PHP 是否相同 如果是 可重入的含义是什么 From PHP n
  • 如何删除文件

    我们有一个脚本 scripts ourscript php和一个文件 media movie1 flv 当我们运行时 我们如何删除这个文件ourscript php Using unlink http php net manual en f
  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 我可以在 PHP 会话变量中安全地存储用户名和密码吗?

    我想在 REST api 之上制作一个轻量级的 web 应用程序 用户只需进行一次身份验证 从那时起 所有针对 web api 的请求都希望通过以某种方式保持用户名和密码有效来完成 我已经做了一个工作原型我在哪里将用户名和密码存储在会话变量
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 当 Passportjs 上使用 Google Auth 时,自定义回调从未被调用

    我尝试使用 PassportJS 登录 Google 但是当我使用自定义回调时 Google 策略从未调用回调 我究竟做错了什么 我的代码如下 端点 var router express Router router get passport
  • UITableView滚动到底部

    我有这行代码 tableView contentOffset CGPointMake 0 0f 10000000 0f 内容大小比10000000 0f 但是 UITableView 仍然没有滚动到底部 我该怎么做 滚动到tableView
  • Clock() 函数总是返回 0 [重复]

    这个问题在这里已经有答案了 可能的重复 The C clock 函数只返回零 https stackoverflow com questions 2134363 the c clock function just returns a zer
  • 在 C++ 中将矩阵定义为数组数组并计算其逆矩阵

    不幸的是 我在 C 方面没有太多经验 并且我正在努力在 C 方面取得进步 首先 我定义了数组数组 以便形成一个 3x3 矩阵 array lt array lt double gt gt input gcnew array lt array
  • C++ 中如何解析嵌套模板?

    我最近问了一个关于确定迭代器在编译时是否指向复数值的问题 并收到了有效的答案 问题在这里 如何专门针对指向复数值的迭代器的算法 https stackoverflow com questions 59954327 how can i spe
  • Espresso:匹配对话框下的视图

    我的测试用例相当简单 在主活动视图上 我有一个抽屉 该抽屉中的一个菜单项可打开一个对话框 我想断言 单击此菜单项 在打开对话框之前关闭抽屉 这是我现在所拥有的 Opens the drawer onView withId R id acti
  • WebDriver Wait '.until(ExpectedConditions.elementToBeClickable' 仅当我将 Thread.sleep(500) 添加到代码中时才有效?

    我正在尝试使用 webdriver wait 单击页面上可见的按钮 但 webdriver 仅在添加后才能单击该按钮Thread sleep到代码 在执行代码之前 我还检查了按钮是否可见 True returns true 按钮可见性检查
  • 钥匙串中的 macOS 安装程序证书评估错误:扩展密钥用法无效

    我生成了一个用于代码签名的 mac 安装程序证书 但收到一个错误 该错误阻止我使用证书对安装程序进行签名 在评估钥匙串访问中的证书时 出现错误 无效的扩展密钥用法 以下是尝试评估安装程序证书以进行代码签名时出现的错误序列 我发现使用 Xco
  • 如何启用 Android 内部应用程序共享?

    我已在 Play 控制台中上传 Android App Bundle 进行 Alpha 测试 但当我打开测试 URL 时 它显示在下面的对话框中 尝试以下选项以启用内部应用程序共享 Option 1 Step 1 打开 Play 商店 St
  • IntelliJ 中的 Google Play、Drive API 示例代码

    我正在关注Android 版 Google 云端硬盘快速入门说明 https developers google com drive quickstart android并让它在 Eclipse Kepler 中工作 Juno 就是很狡猾
  • 值不能为空。参数名称:实体集

    我有一个相当标准的设置 只有 POCO 类 public class Project public int ProjectId get set public string Name get set public int ClientId g
  • 将图像拖放到画布上 (FabricJS)

    问题 我想用图像而不是canvas目的 这意味着您必须先将要添加的内容添加到画布并作为画布的一部分 然后才能添加它 这些图像实际上是网站的一部分 因此不需要做一些复杂的事情 我在这里找到的这段代码仅适用于对象而不是实际元素的情况 顺便说一句
  • 在 UITableView 中滚动时视图被替换

    我是一名 Android 开发人员 对 iOS 应用程序开发非常陌生 我正在尝试构建一个简单的聊天系统 每个单元格中只有一行数据 我正在使用自定义UIView类来生成气泡和UILabel and an UIImageView以编程方式 当我
  • Python 从键列表生成动态字典

    我确实有一个清单 如下所示 keyList1 Person Male Boy Student id 123 Name value1 Roger 如何生成可以按如下方式检索的动态字典 mydict Person Male Boy Studen
  • Bigquery - 计划存储过程不再工作

    最近 Bigquery UI 发生了变化 似乎不再可以安排存储过程自动执行 使用 UI 只是不断要求插入目标表 如果我放置一个虚拟表 则会创建计划 但是当尝试执行时只会抛出一个错误 表明在执行存储过程时我们无法拥有目标表 有人遇到这个问题并
  • SQL 注入预防 - GET_VARS

    我有一个网址 有效时将如下所示 site com page php id 12345 我试图了解我们是否容易受到 sql 注入的攻击 在这个特定的实例中 该值只能是正整数值 因为它是一个 ID 号 我们有时确实使用其他变量 可以是字母或文本
  • Groovy 中分割字符串的惯用方法

    是否有更好 更短 更好的方法来执行以下操作 filename AA BB CC DD EE FF xyz parts filename split packageName parts 0 parts 1 parts 2 parts 3 pa
  • AngularJS - 单个模板中的多个 ng-view

    我正在使用 AngularJS 构建一个动态 Web 应用程序 是否可以有多个ng view在一个模板上 你可以只拥有一个ng view 您可以通过多种方式更改其内容 ng include https docs angularjs org
  • 文件内容更改后使用 ifstream 从同一文件读取(直到 EOF)

    要求 我必须读到 EOF 16 个字节 时间 来自特定文件 以及 然后说睡5秒 现在 5秒后 当我尝试阅读时 从文件 其内容将 到那时已被附加 预期的设计必须是这样的 它从它所在的点读取 之前离开并再次扫描 内容 一次 16 个字节 直到
  • bigint 通过 PDO 截断?

    我遇到了将大整数存储在 a 中的问题BIGINT通过 PDO 在 MySQL 上列 如果我运行这个测试 number 30123456789 var dump number prints string 11 30123456789 new