У меня есть столбец в базе данных PostgreSQL, который является bigint.
Пока я не могу найти способ сформулировать вставку PDO в PHP.
Предопределенные константы PHP только списки PDO::PARAM_INT
, Когда я использую это в своем заявлении, я получаю следующую ошибку. Обратите внимание, что я получаю ту же ошибку, даже если я не включаю тип данных в bindValue
заявление. Насколько я понимаю, опуская тип, который использует PHP PDO::PARAM_INT
на основе типа переменной.
Неопределенное исключение ‘PDOException’ с сообщением ‘SQLSTATE [22003]: числовое значение вне диапазона: 7 ОШИБКА: значение «2978878787878787878»; находится вне диапазона для типа integer ‘в index.php: 163
Как мне сохранить BIGINT в MySQL, используя PDO? здесь вопрос, который говорит о той же проблеме. Однако они используют строку как тип столбца базы данных. Хотя это хороший обходной путь, он не учитывает, если вы не можете изменить типы базы данных.
Есть ли способ использовать bigint с PDO в PHP, который не требует изменений в базе данных?
Пример кода
$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)
Задача ещё не решена.
Других решений пока нет …