类型“ SQLITE3_INTEGER”的最大大小是多少?

时间:2018-10-07 13:39:22

标签: php sqlite

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 :(得分:1)

请参阅PHP的PDO驱动程序:
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位版本)。这样它甚至在到达SQLite之前就成为浮动对象。

您不应该尝试将其绑定为整数。使用字符串。 SQL确实进行类型转换。您可能会保留该列,因为SQLite上的INTEGER甚至结束。它只是您需要解决的PHP。或者您知道,请进行过期升级。