警告:mysql_num_rows():提供的参数不是有效的MySQL结果资源

时间:2011-04-01 22:10:57

标签: php mysql

您好我收到错误“Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/**/**/locate.php on line 16”。

我已经仔细检查了所有内容,搜索了Google搜索/ Stackoverflow,但无法找到原因。不胜感激任何想法!

getdate.php

function getDeals($the_type) {
$result = mysql_query("
    SELECT *
    FROM deals
    WHERE deal_type = '" . $the_type . "'
        ");
}

locate.php?类型=乐趣

$type = $_GET['type'];
include("getdata.php");

getDeals($type);
if (mysql_num_rows($result)) {
    echo '<ul>';
    while($row = mysql_fetch_array($result))
        {
        echo '<a href="deal.php?i=' . $row["i"] . '">';
        echo '<li class="deal ' . $row["deal_type"] . 'deal">';
        echo '<h3>' . $row["deal_title"] . '</h3>';
        echo '</li>';
        echo '</a>';
        }
    echo '</ul>';
}
else {
    echo '<div class="nodeals">None</div>';
}

4 个答案:

答案 0 :(得分:7)

您没有从getDeals函数返回结果,因此未在脚本的主体中定义。

function getDeals($the_type) {
    $result = mysql_query("SELECT * 
                             FROM deals
                            WHERE deal_type = '" . $the_type . "'");
    return $result;
} 

$result = getDeals($type); 

确保您的$ the_type值经过验证和转义(或者更好,使用PDO),以防止SQL注入

答案 1 :(得分:0)

您需要将$ result作为全局导入函数:

function getDeals($the_type) {
    global $result;
    $result = mysql_query("
        SELECT *
        FROM deals
        WHERE deal_type = '" . $the_type . "'
    ");
}

但是,这不是设置此类事物的好方法。您应该使用类似PDO的内容或返回适当的资源标识符。

答案 2 :(得分:0)

有很多方法可以解决这个问题,但最好的方法是返回mysql资源,然后将该资源分配给$result变量。

function getDeals($the_type) {
    return mysql_query("
        SELECT *
        FROM deals
        WHERE deal_type = '" . $the_type . "'
    ");
}

$result = getDeals($type);

答案 3 :(得分:0)

根据经验,99%的错误是由于给定或前一行或语句造成的。在您的情况下,其他人首先注意到它,getDeals($type)不会返回结果。

您还应该将对mysql_query()的呼叫更改为:

function getDeals($the_type) {
    $query = "
        SELECT *
        FROM deals
        WHERE deal_type = '" . $the_type . "'
            ";

    $result = mysql_query($query) or trigger_error(mysql_error().$query);

    return $result;
}