mysql返回空集


mysql returning empty set

非常令人沮丧,但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

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

这应该足以判断这是否是两个最有可能的问题之一:

  • 错误的URL导致没有返回任何行;或
  • 数据库中包含的不是您期望的内容,导致出现错误行

根据你迄今为止的评论,前者是最有可能的。如果结果是在没有where子句的情况下返回一行,则必须找出URL不正确的原因。这可能是大小写敏感度问题或填充(大小(问题等。


如果,正如您在评论中提到的,like=不起作用的地方起作用,那么我们需要查看您的数据。

执行(在数据库级别(:

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

并向我们展示输出的确切内容。类似地,用类似的东西输出代码使用的URL:

print_r($url)

紧接在执行CCD_ 6之前。

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

我没有PHP编程经验,但不应该是"SELECT url FROM sites WHERE url ='". $url."' LIMIT 1"如果$url在引号(" "(内工作,请忽略此项

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

if (mysql_num_rows($exists) > 0)

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