我有以下功能:
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行。
答案 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'"));
}