如何使用PDO绑定PHP中的bigint值?

时间:2017-08-16 14:42:21

标签: php postgresql pdo bindvalue

我在PostgreSQL数据库中有一个bigint。

到目前为止,我无法找到在PHP中制定PDO插入的方法。

PHP Predefined Constants仅列出PDO::PARAM_INT。当我在我的声明中使用它时,我收到以下错误。注意,即使我没有在bindValue语句中包含数据类型,也会出现相同的错误。据我所知,省略PHP的类型是基于变量类型使用PDO::PARAM_INT

  

带有消息'SQLSTATE [22003]的未捕获异常'PDOException':数值超出范围:7 ERROR:value“2978878787878787878”;在index.php:163

中超出了整数'的范围

How do I store a BIGINT in MySQL using PDO?这是一个讨论同一问题的问题。但是,他们直接使用string作为数据库列类型。虽然这是一个很好的解决方法,但如果您无法更改数据库类型,则不会考虑这一点。

有没有办法在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)

1 个答案:

答案 0 :(得分:-1)

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