如何使用 PDO 在 PHP 中绑定 bigint 值?
Posted
技术标签:
【中文标题】如何使用 PDO 在 PHP 中绑定 bigint 值?【英文标题】:How do I bind a bigint value in PHP using PDO? 【发布时间】:2018-01-24 18:39:45 【问题描述】:我在 PostgreSQL 数据库中有一个大整数列。
到目前为止,我还没有找到一种在 php 中制定 PDO 插入的方法。
PHP Predefined Constants 仅列出 PDO::PARAM_INT
。当我在我的声明中使用它时,我收到以下错误。请注意,即使我没有在 bindValue
语句中包含数据类型,我也会遇到相同的错误。据我了解,通过省略类型 PHP 正在使用基于变量类型的PDO::PARAM_INT
。
带有消息“SQLSTATE[22003]”的未捕获异常“PDOException”:数值超出范围:7 错误:值“2978878787878787878”;超出 index.php:163 中整数类型的范围
How do I store a BIGINT in mysql using PDO? 是一个问题here,它谈到了同样的问题。但是,他们直接使用字符串作为数据库列类型。虽然这是一个很好的解决方法,但它不会考虑您是否无法更改数据库类型。
有没有一种方法可以在 PHP 中将 bigint 与 PDO 结合使用而无需修改数据库?
示例代码
$query = "INSERT INTO clients ";
$query .= "(timestamp, name, value) ";
$query .= "VALUES (now(), :name, :value) ";
$query .= "RETURNING id";
$name = "Bob Probert";
$value = 2978878787878787878; // note this is less than bigint max of 9223372036854775807
$stmt->bindValue(':name', $name, PDO::PARAM_STR);
$stmt->bindValue(':value', $value, PDO::PARAM_INT);
表格
Table "db.clients"
Column | Type | Modifiers | Storage | Stats target | Description
---------------+-----------------------------+------------------------------------------------------+----------+--------------+-------------
id | integer | not null default nextval('tickets_id_seq'::regclass) | plain | |
timestamp | timestamp without time zone | | plain | |
name | character varying(40) | | extended | |
value | bigint | not null | plain | |
Indexes:
"tickets_pkey" PRIMARY KEY, btree (id)
【问题讨论】:
您确定它是您数据库中的 BIGINT 吗?你能展示你的表架构吗? @aynber +1,异常提到字段的整数类型,而不是 bigintis out of range for type integer' in
这告诉您您的数据类型是INT
而不是您声称的BigINT
表已添加到原始帖子中。
可能有助于了解一些事情。您使用的是 64 位硬件吗?操作系统是 64 位的吗?你用的是什么版本的php?什么 echo PHP_INT_MAX;给你?
【参考方案1】:
我不知道这是否适用于 PostgreSQL,但对于 MySQL,将这些值绑定为字符串有效。
【讨论】:
以上是关于如何使用 PDO 在 PHP 中绑定 bigint 值?的主要内容,如果未能解决你的问题,请参考以下文章
PHP PostgreSQL PDO 无法使用 LIKE 绑定参数