2011-07-06 82 views
2

非常令人沮丧,但MySQL是该代码返回一个空集(未呼应存在):的MySQL返回空集

if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db("repository", $con); 

$url = stripslashes($url); 
$url = mysql_real_escape_string($url, $con); 
$exists = mysql_query("SELECT url FROM sites WHERE url = '$url' LIMIT 1"); 
if (mysql_num_rows($exists) == 1) { 
    echo "exists"; 
} 

不应该这样做,因为我测试过良好的金额。

该表由一列“url”组成,它是数据类型varchar(1000)(最大值)。存储用于测试目的的url是http://en.wikipedia.org/wiki/Thailand

+1

回声'$ url'数据库中的数据? –

+1

1.您是否对数据库执行了**相同的**查询? 2.什么'mysql_num_rows($ exists)'返回? 3.向我们展示由您的代码生成的**精确**查询。 – zerkms

+0

多数民众赞成也是...我试图在phpmyadmin中使用这个SQL查询...并且它仍然返回空集 – re1man

回答

1

以下是您做的第一步。在使用之前,请从您的查询中删除WHERE url = '$url'并打印出mysql_num_rows($exists)

这应该足以告诉我们,如果这是两个有可能的问题之一:

  • 不良URL导致没有返回行;或
  • 由于数据库包含的内容不正确而导致的行所期望的。

根据您的意见,前者是最有可能的。如果事实证明你得到一排没有where子句,你必须找出你的网址不正确的原因。这可能是一个区分大小写问题或填充(大小)问题等等。


如果,你在评论提到,like作品,其中=没有,那么我们需要看到您的数据。

(在DB级)执行:

select concat('[',url,']') from sites 

,并告诉我们究竟输出是什么。同样,输出代码使用的URL类似于:

print_r($url) 

紧接在执行mysql_query之前。

请将这两个命令的输出附加到您的问题中。

+0

这结束了工作,如果哪里不见了......正如我上面提到.....我使用varchar(1000)....应该只是使用varchar? – re1man

+0

找到它...在哪里URL LIKE工作... – re1man

+0

,但它的一种临时修复... – re1man

-1

这样只会检查MySQL是否只返回一行。检查

if (mysql_num_rows($exists) > 0) 

假设有这样的数据,你正在检查,当然。如果您不确定您传递的网址是否相同,您可能想要使用LIKE和通配符扩大搜索范围。

+1

嗯,他确实说了“LIMIT 1”。 – EboMike

+4

'LIMIT 1'条款应该已经照顾到了,我会认为... –

+0

我知道数据库中只有一行,但是我检查了 – re1man

0

我没有在PHP编程经验,但它不应该是"SELECT url FROM sites WHERE url ='". $url."' LIMIT 1" 您炒掉查询并确认它看起来像之前请忽略这一点,如果$url作品引号内(" "

+0

该查询的OP语法是有效的,您的语法也是有效的,但更麻烦。 – Johan