SQL查询未返回预期值。PHP-MYSQL

SQL查询未返回预期值。PHP-MYSQL,php,mysql,sql,Php,Mysql,Sql,不会返回任何结果,PHP为64位 下面是mysql客户端执行的命令。uid字段为BIGINT $uid=intval($_GET['uid']); //98765432109876543 $sql = "SELECT * FROM accounts WHERE uid = $uid ORDER BY id DESC LIMIT 1"; -- 所以我的问题是,我无法从第一个sql查询中检索期望值的原因是什么?我认为数据库表中没有字段accounts with uid,这就是第一个查询无法工

不会返回任何结果,PHP为64位

下面是mysql客户端执行的命令。uid字段为BIGINT

$uid=intval($_GET['uid']); //98765432109876543  

$sql = "SELECT * FROM accounts WHERE uid = $uid ORDER BY id DESC LIMIT 1";
--


所以我的问题是,我无法从第一个sql查询中检索期望值的原因是什么?

我认为数据库表中没有字段accounts with uid,这就是第一个查询无法工作的原因。使用此查询可以获得正确的结果

Output from the mysql client: 

mysql> SELECT * FROM accounts WHERE uid=98765432109876543 ORDER BY id DESC LIMIT 1;
Empty set (0.00 sec)

我已经完成了你的要求,对我来说很好。您需要更新
表架构

我试过这样的东西

首先,我用
uid
作为
VARCHAR(50)
创建了一个
,它返回了良好的结果

看看这个

但是如果您想要
uid
作为
INT
呢?您不能使用
INT
来存储超过10或11个字符的长字符串(整数),因为它的范围从
-2147483648
2147483647
以及
无符号INT
的范围从
0
4294967295

因此,您必须使用
BIGINT
,它的范围从
-9223372036854775808
9223372036854775807
。看看这个

我假设
uid
永远不会在-ve中有值,所以使用
bigin UNSIGNED
,它的范围从
0
18446744073709551615
,这也适用于您

检查这个


希望这将对您有所帮助。

$sql=“从id=$uid ORDER BY id DESC LIMIT 1”的帐户中选择*;我想这会管用的。是否有名为uid的字段?@ravenanigam是的,当我用较短的整数测试它时,它可以工作,但是我需要它来处理17位整数。检查整数大小?@ravenanigam返回8,所以它是64位。@crible952580将BIGINT更改为BIGINT UNSIGNED已经解决了这个问题。有一个字段“uid”然而UID必须有17位长,id字段只是经典的主id字段。每个人都有一个唯一的uid,所以uid是检查他们的唯一方法,这就是为什么我不能用id来代替uid。将其更改为BIGINT UNSIGNED可以解决这个问题。谢谢
Output from the mysql client: 

mysql> SELECT * FROM accounts WHERE uid=98765432109876543 ORDER BY id DESC LIMIT 1;
Empty set (0.00 sec)
$sql = "SELECT * FROM accounts WHERE id = $uid ORDER BY id DESC LIMIT 1";