PHP查询无法正常工作?

时间:2011-10-20 07:07:10

标签: php mysql

当我在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希望我在这个函数中锁定它?

3 个答案:

答案 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