Php mysql\u num\u行给出了意外的结果

Php mysql\u num\u行给出了意外的结果,php,mysql,Php,Mysql,我有以下功能: public function already_tweeted($tweet){ return mysql_num_rows(mysql_query("SELECT * FROM `retweeted` WHERE `tweet`='$tweet'")); } 很简单。它检查数据库中是否已经存在tweet 该表有以下记录: id user tweet 3 You should retweet this too 2 Retw

我有以下功能:

public function already_tweeted($tweet){
        return mysql_num_rows(mysql_query("SELECT * FROM `retweeted` WHERE `tweet`='$tweet'"));
    }
很简单。它检查数据库中是否已经存在tweet

该表有以下记录:

id  user    tweet
3       You should retweet this too
2       Retweet this
(用户暂时为空)

此代码:

$db_reader = new database_reader;
$already_tweeted = $db_reader->already_tweeted($tweet);
print $tweet . ". Already: ";
var_dump((bool) $already_tweeted);
print "<br>";
我几乎被困在这里了。
当我在phpmyadmin中运行SELECT*FROM
retweetd
WHERE
tweet
='You should retweet this too'时,我返回了1行。

检查$tweet

类似问题

同时,为了安全起见,请更改此线路

return mysql_num_rows(mysql_query("SELECT * FROM retweeted WHERE tweet ='{$tweet}'"));

返回mysql_num_行(mysql_查询(“废话”)是运行查询的最肮脏的方式。
制作一个助手函数,而不是这个函数

mysql\u num\u rows()
是一种最肮脏的行计数方法,应改用
SELECT count(*)
wuery

//put this function to your function library
function dbgetvar($query){
  $res = mysql_query($query);
  if (!$res) {
    trigger_error("dbget: ".mysql_error()." in ".$query);
    return FALSE;
  }
  $row = mysql_fetch_row($res);
  if (!$row) return NULL;
  return $row[0];
}
public function already_tweeted($tweet){
  $tweet = mysql_real_escape_string($tweet);
  return dbgetvar("SELECT count(*) FROM `retweeted` WHERE `tweet`='$tweet'"));
}

$tweet
中的数据从何而来?它是否可能包含不可见的字符,如
\n
或双空格?数据来自twitter(对我帐户的回复)。这就是我所想的,但我检查了字符数(\n在打印或var_dump使用时会显示为char right,或者至少打印新行),并且我使用trim,因此没有双空格。
\n
将仅显示在浏览器的源代码视图中,而不会显示在渲染输出中
trim()
将只删除前导空格和尾随空格。字符串中的双空格之类的内容不会受到影响(否则您将丢失所有空格,而不仅仅是双空格),但如果您也要转发此内容,那就太倒霉了。已:字符串(1)“0”转发此消息。已经:string(1)“1”@Tim这没关系。我的答案不是关于你的问题,而是关于你的代码。至于你的问题-只需比较这些字符串。mysql_num_rows()与此无关是的,您的代码非常干净,谢谢。虽然$tweet的值是正确的,但这仍然很奇怪,这是我检查的第一件事。这个资源是有效的。除了输出,似乎每件事情都很好,你能输入更多的代码吗;打印(已在推特上发布);为什么
打印($ready\u tweet)
??我们已经知道,
$ready\u tweet
的价值,但这解决了它。我猜他的意思是“回声”;打印(tweet)$tweet确实有两个空格,由于某些原因,不能通过trim打印/删除
//put this function to your function library
function dbgetvar($query){
  $res = mysql_query($query);
  if (!$res) {
    trigger_error("dbget: ".mysql_error()." in ".$query);
    return FALSE;
  }
  $row = mysql_fetch_row($res);
  if (!$row) return NULL;
  return $row[0];
}
public function already_tweeted($tweet){
  $tweet = mysql_real_escape_string($tweet);
  return dbgetvar("SELECT count(*) FROM `retweeted` WHERE `tweet`='$tweet'"));
}