Каков максимальный размер типа "SQLITE3_INTEGER"? - PullRequest
0 голосов
/ 07 октября 2018

Как указано в https://www.sqlite.org/datatype3.html:

INTEGER: значение представляет собой целое число со знаком, сохраняемое в 1, 2, 3, 4, 6 или 8 байтах в зависимости от величинызначения.

Проблема в том, что приведенный ниже оператор дает желаемый результат, так как значения bound сравнительно меньше (например, $ roll_no = 1111111111), однако выполнение оператора не приводит к результату, когда значение привязки больше (например, $ roll_no = 3333333333), тогда как таблица SQLite уже содержит запись с этим большим значением.

Это потому, что значение параметраусеченный или любая другая причина?Что нужно сделать, чтобы избавиться от этого?

$stmt1 = $db->prepare("select sname,reg_no from student where roll_no=:roll_no");

$stmt1->bindParam(':roll_no', $roll_no, SQLITE3_INTEGER);

1 Ответ

0 голосов
/ 07 октября 2018

См. Драйвер PDO PHP:
https://github.com/php/php-src/search?q=SQLITE_INTEGER&unscoped_q=SQLITE_INTEGER

#if LONG_MAX <= 2147483647
            if (val > ZEND_LONG_MAX || val < ZEND_LONG_MIN) {
                ZVAL_STRINGL(data, (char *)sqlite3_column_text(stmt, column), sqlite3_column_bytes(stmt, column));

Поддерживается возврат больших целых чисел, но только в виде строк.

Нет способа получить 3333333333как нативное целое число в конце PHP (32-битные версии).Такой он станет float еще до того, как достигнет SQLite.

Вам не нужно связывать его как целое число.Используйте строку.SQL выполняет приведение типов самостоятельно.Скорее всего, вы можете оставить столбец как INTEGER на концах SQLites даже.Вам нужно обойти только PHP.Или вы знаете, сделать просроченное обновление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...