我从数据库中提取线程,
$getthreads = mysql_query("SELECT * from threads WHERE subcat=" . $thread . "") or die(mysql_error());
while ($threads = mysql_fetch_array($getthreads)) {
if (mysql_num_rows($threads) > 0) {
警告:mysql_num_rows()要求参数1为资源,第30行的C:\ xampp \ htdocs \ views \ threads.php中给出的数组
但是db中的东西有正确的信息,这里是我的$ threads var:
$thread = isset($_GET['thread']) ? $system->escape($_GET['thread']) : null;
为什么它应该给我这个错误呢?
答案 0 :(得分:1)
$Query = "SELECT * from threads WHERE subcat='".mysql_real_escape_string($thread)."'";
$getthreads = mysql_query($Query) or die(mysql_error());
if (mysql_num_rows($getthreads) > 0) {
mysql_num_rows参数:正在评估的结果资源。这个结果来自对mysql_query()的调用。
PS使用mysqli或pdo,不推荐使用mysql
答案 1 :(得分:0)
我的猜测是subcat
是一个字符串变量。如果是这样,这可能会有效:
SELECT * from threads WHERE subcat='" . $thread . "'"
接下来是mysql_命令已过时的强制性声明。
接下来,代码容易受到SQL注入攻击。您应该学习如何使用参数。
答案 2 :(得分:0)
首先,您使用带有错误参数的mysql_num_rows。纠正它,
if(mysql_num_rows($getthreads) > 0) {
}
但是,实际上你不需要这样做。在从查询中获取任何行之前,循环不会运行。如果您的查询错误,我猜您可能会遇到问题。因为,我看到你正在为$thread
分配空值,而且似乎你想在数据库中检查null
。您不应该将null
与=
运营商匹配。即使在大多数情况下它似乎没问题,但它可能表现得非常糟糕。你必须使用
... WHERE subcat is NULL") ...
匹配数据库中的null
值。这样,您必须更改代码的逻辑以测试null
。我猜,它可能就像
... WHERE subcat = '". mysql_real_escape_string($thread).'" OR is NULL) ...
如果,我正确使用此代码实现您的目标。
答案 3 :(得分:-1)
试试这个,添加了'" . mysql_real_escape_string($thread) . "'
。
mysql_real_escape_string - 转义字符串中的特殊字符以用于SQL语句
$getthreads = mysql_query("SELECT * from threads WHERE subcat='" . mysql_real_escape_string($thread) . "' ") or die(mysql_error());
if (mysql_num_rows($getthreads) > 0) {
while ($threads = mysql_fetch_array($getthreads)) {
....
}
}