0

URL 形式が www.site.com/article1.html の mySQL データベースに 300 の記事が保存されているサイトがあります。

ほとんどの無効な URL は、メイン サイトに正常にリダイレクトされます。たとえば、www.site.com/article301 は www.site.com にリダイレクトされます。これは私が望むものです。

しかし、www.site.com/article301.html はどこにもリダイレクトしません。代わりに、空の記事テンプレートが読み込まれ、ページの上部に次のエラーが表示されます。

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home//public_html/site.com/functions.php on line 26

26 行目以降の読み取り

        if(mysql_num_rows($result)>0) {
        $row=mysql_fetch_array($result);
        if(ENABLE_REWRITE == 1) $path=' &raquo; <a href="'.DOC_ROOT.'/'.$row['nameurl'].'/page_1/">'.$row['name'].'</a>'.$path;
        if(ENABLE_REWRITE == 0) $path=' &raquo; <a href="index.php?page=1&category='.$id.'">'.$row['name'].'</a>'.$path;
        if($row['parent']==0) $f=1;
        else $id=$row['parent'];
    } else {
        return ' - ';
    }
}
return $path;
}

これを修正する方法はありますか?

King Skippus のリクエストによる完全なコードは次のとおりです。

<?php
/*function get_folders_path($id) {
    $f=0;
    $path='';
    while($f==0)
    {
        $result=mysql_query("SELECT name, parent FROM categories WHERE id=$id");
        if(mysql_num_rows($result)>0) {
            $row=mysql_fetch_array($result);
            $path=' &raquo; '.$row['name'].$path;
            if($row['parent']==0) $f=1;
            else $id=$row['parent'];
        } else {
            return ' - ';
        }
    }
    return $path;
}*/

function get_folders_path($id) {
    $f=0;
    $path='';
    while($f==0)
    {
        $result=mysql_query("SELECT * FROM categories WHERE id=$id");
        if($result !== FALSE && mysql_num_rows($result)>0) {
            $row=mysql_fetch_array($result);
            if(ENABLE_REWRITE == 1) $path=' &raquo; <a       href="'.DOC_ROOT.'/'.$row['nameurl'].'/page_1/">'.$row['name'].'</a>'.$path;
            if(ENABLE_REWRITE == 0) $path=' &raquo; <a href="index.php?page=1&category='.$id.'">'.$row['name'].'</a>'.$path;
            if($row['parent']==0) $f=1;
            else $id=$row['parent'];
        } else {
            return ' - ';
        }
    }
    return $path;
}

function get_categories_tree($id) {
    static $categs = array ();
    static $level=0;
    $level++;

    $result=mysql_query("SELECT * FROM categories WHERE parent=$id");

    while($row=mysql_fetch_array($result)) {
        $categs[$row['id']][0] = $row['id'];
        $categs[$row['id']][1] = '/'.$row['nameurl'];
        $categs[$row['id']][2] = str_repeat('&nbsp;&nbsp;', $level-1);
        $categs[$row['id']][3] = $row['name'];
        get_categories_tree($row['id']);
    }
    $level--; 
    return $categs;
}

function get_cats($id) {
    $categs = array ();
    $result=mysql_query("SELECT * FROM categories WHERE parent=$id");

    while($row=mysql_fetch_array($result)) {
        $categs[$row['id']][0] = $row['id'];
        $categs[$row['id']][1] = '/'.$row['nameurl'];
//      $categs[$row['id']][2] = str_repeat('&nbsp;&nbsp;', $level-1);
        $categs[$row['id']][3] = $row['name'];
    }
    return $categs;
}

/*function login() {
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
       header('WWW-Authenticate: Basic realm="My Realm"');
       header('HTTP/1.0 401 Unauthorized');
       return false;
    } else {
        $result=mysql_query("SELECT * FROM users WHERE login='{$_SERVER['PHP_AUTH_USER']}' AND password='{$_SERVER['PHP_AUTH_PW']}'");
        if(mysql_num_rows($result)>0) return true;
        else {
            header('WWW-Authenticate: Basic realm="My Realm"');
            header('HTTP/1.0 401 Unauthorized');
            return false;
        }
    }
}*/

function login() {
    if (!isset($_SESSION['AUTH_USER']) || !isset($_SESSION['AUTH_PASS'])) return false;
    else {
        $result=mysql_query("SELECT * FROM users WHERE     login='{$_SESSION['AUTH_USER']}' AND password='{$_SESSION['AUTH_PASS']}'");
        if(mysql_num_rows($result)>0) return true;
        else return false;
    }
}

function get_categories($id) {
    static $categs = array ("0" => "[Top]");
    static $level=0;
    $level++;

    $result=mysql_query("SELECT * FROM categories WHERE parent=$id");

    while($row=mysql_fetch_array($result)) {
        $categs[$row['id']] = str_repeat('|&nbsp;&nbsp;&nbsp;', $level-1).'|___'.$row['name'];
        get_categories($row['id']);
    }
    $level--; 
    return $categs;
}

function get_parent_name($id) {
    if($id!=0) {
        $result=mysql_query("SELECT name FROM categories WHERE id=$id");
        if(mysql_num_rows($result)>0) {
            $row=mysql_fetch_array($result);
            return $row['name'];
        }
        else return '-';
    }
    else return 'Top';
}
function getcatname($id, $table)
{
        $r=mysql_query("SELECT title FROM $table WHERE id='$id'");
        if(mysql_num_rows($r)>0) {
            $row=mysql_fetch_array($r);
            return $row['title'];
        }
    else
        return "-";
}
?>
4

2 に答える 2

1

おそらくクエリが失敗し、エラー処理がありません。基本的な最低限のクエリ シーケンスは次のようになります。

$result = mysql_query($sql) or die(mysql_error());
                           ^^^^^^^^^^^^^^^^^^^^^^

クエリが成功したと仮定して$result後でやみくもに使用する場合、mysql_query は何かがブームになるとブール値の FALSE を返すため、同様のエラーが発生する傾向があります。その FALSE は有効なステートメント ハンドルではないため、後続の num_rows/fetch 呼び出しもブームになります。

クエリが成功したと想定しないでください。SQL 構文が 100% 完璧であっても、チェックしない理由は他にもたくさんあります。

于 2012-06-04T03:19:50.843 に答える
0

交換してみる

if(mysql_num_rows($result)>0) {

if($result === FALSE) {
    header('Location: http://www.example.com/');
}
else if (mysql_num_rows($result)>0) {
    // Query was valid, but no rows returned. Take appropriate action.
}

編集

トラブルシューティングの目的で、代わりに関数をこれに変更すると、何が表示されますか? これにより意図的にサイトが壊れますが、トラブルシューティングに役立つデータが提供されることに注意してください。

function get_folders_path($id) {
    $f=0;
    $path='';
    while($f==0)
    {
        $result=mysql_query("SELECT * FROM categories WHERE id=$id");
        die(sprintf("Value of id: %s, MySQL Error: %s",
            var_dump($id, true), var_dump(mysql_error($result), true)));
        // Leave the rest of your function as-is, just insert the line above.
于 2012-06-04T03:21:55.527 に答える