Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP查询不工作?_Php_Mysql - Fatal编程技术网

PHP查询不工作?

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控制台中为我的数据库发出以下查询时,我得到以下结果:

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更正您的帖子,一切都会好起来;)