当我在mysql控制台中为我的数据库发出以下查询时,我得到以下内容:
mysql> SELECT ipaddr FROM ipposts WHERE ipaddr=2149856614;
+------------+
| ipaddr |
+------------+
| 2149856614 |
| 2149856614 |
| 2149856614 |
+------------+
3 rows in set (0.00 sec)
但是,以下来自我的php:
的codesnippet$query = "SELECT ipaddr FROM ipposts WHERE ipaddr=2149856614";
$result = mysql_query($query);
$rows = mysql_num_rows($result);
if($rows == 0)
return addIP($ip);
每次都调用addIP()。这是为什么?
EDIT 我使用mysql_error()来转储一个我以前从未见过的“TABLE”ipposts'没有用LOCK TABLES锁定“,我在我的函数中添加了LOCK READ,WRITE和UNLOCK,现在它可以工作了。我不确定为什么mysql希望我在这个函数中锁定它?
答案 0 :(得分:1)
你有没有尝试过:
$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
并检查它是否为零(结果,不是行数)
答案 1 :(得分:1)
您需要使用 BIGINT
来存储这么大的数字,或者如果您绝对知道自己没有负值,则可以使用UNSIGNED INT
将允许存储数字0-4294967295。
此外,您应该执行错误检查,以确保查询中没有错误。
,您不应使用INT
类型字段来存储IP地址。例如,
111.222.333.44
111.222.33.344
两者都会在数据库中存储相同内容。您应该将它们存储为字符串,或者提取 longip
答案 2 :(得分:0)
如果$query = "SELECT ipaddr FROM ipposts WHERE ipaddr='2149856614'";
列定义为ipaddr
varchar