【问题标题】:How do I bind a bigint value in PHP using PDO?如何使用 PDO 在 PHP 中绑定 bigint 值?
【发布时间】: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,异常提到字段的整数类型,而不是 bigint
  • is out of range for type integer' in 这告诉您您的数据类型是INT 而不是您声称的BigINT
  • 表已添加到原始帖子中。
  • 可能有助于了解一些事情。您使用的是 64 位硬件吗?操作系统是 64 位的吗?你用的是什么版本的php?什么 echo PHP_INT_MAX;给你?

标签: php postgresql pdo bindvalue


【解决方案1】:

我不知道这是否适用于 PostgreSQL,但对于 MySQL,将这些值绑定为字符串有效。

【讨论】:

    猜你喜欢
    • 2012-08-09
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 2013-08-30
    • 2019-04-03
    • 2012-04-27
    相关资源
    最近更新 更多