Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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
Mysql SQL是否存在问题_Mysql_Sql - Fatal编程技术网

Mysql SQL是否存在问题

Mysql SQL是否存在问题,mysql,sql,Mysql,Sql,我想将名为“$ip”的字符串变量与“$Hood”表中的列名“ip”匹配。 如果没有匹配,那就做点什么 所以我有这个代码: if (mysql_query("IF EXISTS(SELECT TOP 1 1 FROM $Hood WHERE ip=$ip)") == 1) 它不工作,它假设返回1,因为存在匹配项。 这里怎么了 对于mysql,我认为您的查询应该是 select ip from $Hood where ip = $ip limit 0, 1. 我还希望您正在转义或验证您的数据

我想将名为“$ip”的字符串变量与“$Hood”表中的列名“ip”匹配。 如果没有匹配,那就做点什么

所以我有这个代码:

if (mysql_query("IF EXISTS(SELECT TOP 1  1 FROM $Hood WHERE ip=$ip)") == 1) 
它不工作,它假设返回1,因为存在匹配项。
这里怎么了

对于mysql,我认为您的查询应该是

select ip from $Hood where ip = $ip limit 0, 1.

我还希望您正在转义或验证您的数据。

对于mysql,我认为您的查询应该是

select ip from $Hood where ip = $ip limit 0, 1.

我还希望您正在转义或验证数据。

Mysql没有top子句。你必须使用极限

select * from table where condition
然后可以使用mysql\u num\u rows()检查结果

编辑。还有其他选择吗

select exists(select * from table where condition) as result

这将为您提供1或0。

Mysql没有top子句。你必须使用极限

select * from table where condition
然后可以使用mysql\u num\u rows()检查结果

编辑。还有其他选择吗

select exists(select * from table where condition) as result

这将为您提供1或0。

只需从数据库中选择匹配的ip,如下所示:

SELECT ip 
FROM $hood 
WHERE ip='$ip' 
LIMIT 1
然后计算行数,如果它等于1,则有一个匹配项,否则为0,如下所示:

if(mysql_num_rows(mysql_query(SELECT ip FROM $hood WHERE ip='$ip' LIMIT 1)) == 1)

只需从数据库中选择匹配的ip,如下所示:

SELECT ip 
FROM $hood 
WHERE ip='$ip' 
LIMIT 1
然后计算行数,如果它等于1,则有一个匹配项,否则为0,如下所示:

if(mysql_num_rows(mysql_query(SELECT ip FROM $hood WHERE ip='$ip' LIMIT 1)) == 1)

如果未找到匹配项,则不会返回任何记录。不能用这种方式将空记录集与“1”进行比较

使用COUNT是一种选择,但是如果匹配的数量非常高,那么下面的方法可能会带来性能方面的好处(代价是冗长)


编辑

另一方面,我建议您采取一些调试步骤来理解您的问题

直接在SQL中执行查询并查看结果。一旦你对SQL的工作感到满意,你就知道你现在只需要处理PHP了

构建SQL查询,并将其回显到屏幕上。检查它的实际格式是否正确,然后再次直接在SQL中测试它。现在您知道您的PHP正在正确地构建查询

现在,用PHP构建和执行查询,并将结果回显到屏幕上。结果是否与直接在SQL中测试时的行为相匹配

最后,将其构建到IF语句中



通过验证每个步骤,您可以快速确定问题所在并直接攻击它们。

如果未找到匹配项,则不会返回任何记录。不能用这种方式将空记录集与“1”进行比较

使用COUNT是一种选择,但是如果匹配的数量非常高,那么下面的方法可能会带来性能方面的好处(代价是冗长)


编辑

另一方面,我建议您采取一些调试步骤来理解您的问题

直接在SQL中执行查询并查看结果。一旦你对SQL的工作感到满意,你就知道你现在只需要处理PHP了

构建SQL查询,并将其回显到屏幕上。检查它的实际格式是否正确,然后再次直接在SQL中测试它。现在您知道您的PHP正在正确地构建查询

现在,用PHP构建和执行查询,并将结果回显到屏幕上。结果是否与直接在SQL中测试时的行为相匹配

最后,将其构建到IF语句中



通过验证每个步骤,您可以快速确定问题所在,并直接解决问题。

为什么要在
SELECT
语句中使用
TOP 1
?数据库中ip列的类型是什么?前1名是SQL Server TSQL。我认为MySQL是限制1。@汤姆:那么你至少应该把
$ip
变量用单引号括起来,因为它应该是一个字符串。并尝试对大小进行此查询:
从$hood中选择IF(ip='$ip',1,0),其中ip='$ip'LIMIT 1
@Dems:这不完全正确-查询的LIMIT部分仅限制结果集,而不限制搜索条件。因此,查询将搜索整个表,并且只返回一个row@Dems:你完全正确,先生,我没有解释那件事@Tom,我建议这样做:mysql_num_rows(mysql_query(
SELECT ip FROM$hood WHERE ip='$ip'LIMIT 1
)==1`为什么在
SELECT
语句中使用
TOP 1
?数据库中ip列的类型是什么?前1名是SQL Server TSQL。我认为MySQL是限制1。@汤姆:那么你至少应该把
$ip
变量用单引号括起来,因为它应该是一个字符串。并尝试对大小进行此查询:
从$hood中选择IF(ip='$ip',1,0),其中ip='$ip'LIMIT 1
@Dems:这不完全正确-查询的LIMIT部分仅限制结果集,而不限制搜索条件。因此,查询将搜索整个表,并且只返回一个row@Dems:你完全正确,先生,我没有解释那件事@Tom,我建议这样做:mysql_num_rows(mysql_query(
SELECT ip FROM$hood WHERE ip='$ip'LIMIT 1
)==1`尝试了第二个,不起作用:if((mysql_query(“SELECT exists(SELECT*FROM$hood WHERE ip='$ip')))!=1){我还是喜欢第一个。
从$Hood中选择1,其中ip='$ip'限制1
,然后使用mysql_num_rows()检查是否有0行或1行。尝试了第二个,不起作用:if((mysql_查询(“选择存在(从$Hood中选择*ip='$ip'))!=1){我还是喜欢第一个。
从$Hood中选择1,其中ip='$ip'限制1
,然后使用mysql_num_rows()检查您是否有0行或1行。我编辑了我的答案,添加了一个注释,可能是调试步骤。听起来好像查询没有完全按照需要生成。如果您可以建立SQL逻辑,然后检查PHP生成的SQL,您可能会发现您的错误。我编辑了答案,添加了注释简单的调试步骤。听起来好像查询并没有完全按照需要生成。如果您可以建立SQL逻辑,然后检查PHP生成的SQL,您可能会发现错误。只需更改