如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);
答案 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。或者您知道,请进行过期升级。