mysql返回空集

时间:2011-07-06 22:48:46

标签: php 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)(最大值)。为测试目的而存储的网址是http://en.wikipedia.org/wiki/Thailand

3 个答案:

答案 0 :(得分:1)

这是你迈出的第一步。完全从查询中删除WHERE url = '$url'并在使用前打印mysql_num_rows($exists)

这应该足以说明它是否是两个最有可能的问题之一:

  • 错误的网址导致没有返回任何行;或
  • 由数据库引起的错误行包含非您期望的内容。

根据您迄今为止的评论,前者最有可能。如果结果是没有 where子句,那么你必须找出你的网址不正确的原因。这可能是区分大小写的问题或填充(大小)问题等等。


正如您在评论中提到的,like适用于=没有的地方,那么我们需要查看您的数据。

执行(在DB级别):

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

并向我们显示完全输出是什么。同样,输出代码使用的URL,例如:

print_r($url)

在执行mysql_query之前。

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

答案 1 :(得分:0)

我没有PHP编程经验,但不应该是"SELECT url FROM sites WHERE url ='". $url."' LIMIT 1" 如果$url适用于引号(" "

,请忽略此操作

答案 2 :(得分:-1)

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

if (mysql_num_rows($exists) > 0)

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