我在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)
答案 0 :(得分:-1)
我不知道这是否适用于 PostgreSQL,但对于 MySQL 将这些值绑定为字符串有效。