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

时间:2015-09-22 11:46:20

标签: php mysql sql

$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查询中检索预期值的原因是什么?

2 个答案:

答案 0 :(得分:1)

我执行了你的问题,对我来说工作得很好。您需要更新table schema

我已经测试了类似的东西。

首先,我创建了table uid作为VARCHAR(50),并且返回了良好的结果。

选中Fiddle

但如果您希望uidINT,该怎么办?你不能使用INT来存储超过10或11个字符长的字符串(整数),因为它的范围从-21474836482147483647,而UNSIGNED INT的范围是0 {1}}到4294967295

所以您使用BIGINT代替它,其范围从-92233720368547758089223372036854775807。请检查此FIDDLE

我认为uid永远不会在-ve中有价值,因此请使用BIGINT UNSIGNED,其范围从018446744073709551615,这也适用于您。< / 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";