mysql_num_rows给出意想不到的结果

时间:2010-09-25 13:50:27

标签: php mysql

我有以下功能:

public function already_tweeted($tweet){
        return mysql_num_rows(mysql_query("SELECT * FROM `retweeted` WHERE `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>";

提供以下输出:

You should retweet this too. Already: bool(false) 
Retweet this. Already: bool(true) 

我几乎被困在这里。 当我在phpmyadmin中运行SELECT * FROM retweeted WHERE tweet ='你应该转推这个'时我得到1行。

2 个答案:

答案 0 :(得分:1)

检查 $ tweet

中的值是多少

类似的问题

同时将此行更改为安全

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

答案 1 :(得分:0)

return mysql_num_rows(mysql_query("blah-blah"));是运行查询最脏的方式 做一个帮助函数,而不是这个恐怖。

mysql_num_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'"));
}