PHP查询不工作?
当我在mysql控制台中为我的数据库发出以下查询时,我得到以下结果:PHP查询不工作?,php,mysql,Php,Mysql,当我在mysql控制台中为我的数据库发出以下查询时,我得到以下结果: mysql> SELECT ipaddr FROM ipposts WHERE ipaddr=2149856614; +------------+ | ipaddr | +------------+ | 2149856614 | | 2149856614 | | 2149856614 | +------------+ 3 rows in set (0.00 sec) 但是,以下代码片段来自我的php: $que
mysql> SELECT ipaddr FROM ipposts WHERE ipaddr=2149856614;
+------------+
| ipaddr |
+------------+
| 2149856614 |
| 2149856614 |
| 2149856614 |
+------------+
3 rows in set (0.00 sec)
但是,以下代码片段来自我的php:
$query = "SELECT ipaddr FROM ipposts WHERE ipaddr=2149856614";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
if($rows == 0)
return addIP($ip);
每次调用addIP()。为什么会这样
编辑
我使用mysql_error()转储了一个我以前从未见过的“表'ipposts'没有用锁表锁定”,我在函数中添加了锁读、写和解锁,现在它可以工作了。我不知道mysql为什么要我的锁在这个函数中 试试$query=“从IPPOST中选择IPADR,其中IPADR='2149856614'
如果ipaddr
列定义为varchar
是否尝试:
$query = "SELECT ipaddr FROM ipposts WHERE ipaddr=2149856614";
$result = mysql_query($query);
if ($result) {
$rows = mysql_num_rows($result);
if($rows == 0)
return addIP($ip);
}
无论如何,因为您不需要获取记录,只需要获取它们的计数,所以可以使用不同的查询:
SELECT COUNT(ipaddr) FROM ipposts
WHERE ipaddr=2149856614
并检查它是否为零(结果,而不是行数)或不为了存储这么大的数字,您需要使用BIGINT
,或者如果您完全知道不会有负值,您可以使用UNSIGNED INT
,这将允许存储数字0-4294967295
此外,您应该执行错误检查,以确保查询中没有错误
同样,您不应该使用INT
类型字段来存储IP地址。比如说,
111.222.333.44
111.222.33.344
两者都将在数据库中存储相同的内容。您应该将它们存储为一个字符串,或者提取一个,那么是什么保证了
mysql\u查询实际成功并且在查询过程中没有出错?大量示例明确建议使用错误检查机制,您甚至可以使用mysql\u query
返回true或false以及mysql\u error()
来检查发生的情况-1,不用自己动手。试着在mysql窗口中回显$query并发布您的输出。顺便说一句,您不应该在INT列中存储IP地址。以IP地址109.74.194.4和109.74.19.44为例?对于您的数据库,两者都是相同的,但它们是不同的计算机。首先检查$row的值(用于调试)。您的代码似乎很好,尝试var_dump
ing$result
和$rows
ipaddr列是一个int(10)UNSIGNED他告诉@lobster1234 ipaddr列是一个int(10)UNSIGNED,所以这应该不是问题。。“但我找不到更好的理由了……”贝瑞·兰格拉克之前告诉我,然后。。。111.222.33.344不是有效的IP;)很明显,但这只是为了演示。抱歉,如果你抄袭了你的答案,我通常不会在发布之前查看其他答案:PNo,别担心!!使用有效IP更正您的帖子,一切都会好起来;)