$uid=intval($_GET['uid']); //98765432109876543
$sql = "SELECT * FROM accounts WHERE uid = $uid ORDER BY id DESC LIMIT 1";
不会返回任何结果,PHP是64位。
下面我从mysql客户端发出执行的命令。 uid字段是BIGINT
Output from the mysql client:
mysql> SELECT * FROM accounts WHERE id = 1 ORDER BY id DESC LIMIT 1;
| id | uid | paid_date |
| 1 | 98765432109876543 | 2015-09-20 12:56:47 |
-
Output from the mysql client:
mysql> SELECT * FROM accounts WHERE uid=98765432109876543 ORDER BY id DESC LIMIT 1;
Empty set (0.00 sec)
所以我的问题是,我无法从第一个SQL查询中检索预期值的原因是什么?
答案 0 :(得分:1)
我执行了你的问题,对我来说工作得很好。您需要更新table schema
。
我已经测试了类似的东西。
首先,我创建了table
uid
作为VARCHAR(50)
,并且返回了良好的结果。
选中Fiddle。
但如果您希望uid
为INT
,该怎么办?你不能使用INT
来存储超过10或11个字符长的字符串(整数),因为它的范围从-2147483648
到2147483647
,而UNSIGNED INT
的范围是0
{1}}到4294967295
。
所以您使用BIGINT
代替它,其范围从-9223372036854775808
到9223372036854775807
。请检查此FIDDLE。
我认为uid
永远不会在-ve中有价值,因此请使用BIGINT UNSIGNED
,其范围从0
到18446744073709551615
,这也适用于您。< / p>
选中此FIDDLE
To read more about limitations/ranges, please look here
希望这会对你有所帮助。
答案 1 :(得分:-1)
我认为使用uid的数据库表帐户中没有字段,这就是为什么第一个查询不起作用的原因。使用此查询来获得正确的结果。
$sql = "SELECT * FROM accounts WHERE id = $uid ORDER BY id DESC LIMIT 1";