为什么我会收到“致命错误:在非对象上调用成员函数查询()”错误?

时间:2015-10-16 15:10:01

标签: javascript php jquery html

这是我的私人服务器realmeye http://www.thenoxusproject.org/realmeye/index.php的代码 我一直收到这个错误,我不知道如何修复它,请帮忙吗?

  

致命错误:在第112行的/home/noxus/public_html/realmeye/index.php中调用非对象的成员函数query()

=============================================== ================

index.php代码低于

<?php 

require_once('template/config.php');
// database info
define('HOST','MY VPS IP');
define('DB','rotmg');
define('USER','root');
define('PASS','DB PASSWORD');
function connect_db()
{
    $pdo = new PDO('mysql:host='.HOST.';dbname='.DB,USER,PASS);
    return $db;
}
?>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, target-densityDpi=device-dpi">
    <title>Player List</title>
    <link rel="shortcut icon" href="img/favicon.ico">
    <meta name="msapplication-config" content="none">
    <link rel="canonical" href="/top-players-by-fame">
    <meta name="keywords" content="realm of the mad god, rotmg, statistics, stats,top players,by fame">
    <meta name="description" content="Top Players in Realm of the Mad God by fame 1-101.">
    <link href="css/bootstrap.min.css" rel="stylesheet">
    <link href="css/bootstrap-theme.min.css" rel="stylesheet">
    <link href="css/typeahead.js-bootstrap.css" rel="stylesheet">
    <link href="css/tablesorter.css" rel="stylesheet">
    <link href="css/realmeye.css" rel="stylesheet">
    <style id="swaggy">
        #plscenterme {
            text-align: center;
        }
    </style>
</head> 
<body>
<?php require_once('template/navbar.php'); ?>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            <div id="plscenterme">
                <h1><?= SERVER_NAME . ' - Player list' ?></h1>
                <p>Noxus Player List</p>
            </div>
        </div>
        <nav class="text-center">
            <ul class="pagination">
                <li <?= $type == 'all' ? "class='active'" : '' ?>><a href="index.php?type=all">All</a></li>

            </ul>
        </nav>
        <div class="table-responsive">
            <style type="text/css">
                #c th:nth-child(1), #c td:nth-child(1), #c th:nth-child(4), #c td:nth-child(4), #c th:nth-child(5), #c td:nth-child(5), #c th:nth-child(6), #c td:nth-child(6), #c th:nth-child(7), #c td:nth-child(7), #c th:nth-child(8), #c td:nth-child(8), #c th:nth-child(9), #c td:nth-child(9) {
                    text-align: right
                }
            </style>
            <table id="c" class="table table-striped tablesorter">
                <thead>
                <tr>
                    <th class="header"></th>
                    <th class="header">Name</th>
                    <th class="header">Guild</th>
                    <th class="header">Fame</th>
                    <th class="header">Exp</th>
                    <th class="header">
                        <abbr title="Rank">R</abbr>
                    </th>
                    <th class="header">
                        <abbr title="Chars">C</abbr>
                    </th>
                    <th class="header">
                        <abbr title="Avg. Fame / Char">AF/C</abbr>
                    </th>
                    <th class="header">
                        <abbr title="Avg. Exp / Char">AE/C</abbr>
                    </th>
                    <th class="header">Last seen</th>
                    <th class="header">
                        <abbr title="Server">Srv.</abbr>
                    </th>
                </tr>
                </thead>
                <tbody>
                <?php
        $count = 1;
                $accounts = $type == 'all' ? get_accounts() : get_accounts();
                while ($row = $accounts->fetch_assoc())
                { ?>
                    <tr>
                        <!-- Number -->
                        <td><?=$count . '.' ?></td>
                        <td>
                            <div class="star-container">
                                <!-- Name -->
                                <a href="player.php?player=<?=$row['name'] ?>"><?=$row['name'] ?></a>
                                <!-- Rank/Stars -->
                                <div class="star star-white"></div>
                            </div>
                        </td>
                        <!-- Guild -->
                        <td><?php
                            $currentGuildID = $row1['guild'];
                            $guildName = "";
                            $table = "SELECT * FROM 'guilds' WHERE 'id'=$currentGuildID";
                            $query = $pdo->query($table) or die ('An error occurred.');
                            while ($row1 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $guildName = $row1['name'];
                            }
                            if ($currentGuildID == 0)
                                echo "None";
                            echo $guildName;
                            ?></td>
                        <!-- Fame/FameHistory-->
                        <td><?php
                            $currentFame = "";
                            $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "SELECT * FROM `characters` WHERE `accId`=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row2 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $currentFame = $currentFame + $row2['fame'];
                            }

                            if ($currentFame == 0 or $currentFame == null) {
                                echo "0";
                            }else {
                                echo $currentFame;}
                            ?></td>
                        <!-- EXP -->
                        <td><?php
                            $currentEXP = "";
                            $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "SELECT * FROM `characters` WHERE `accId`=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row3 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $currentEXP = $currentEXP + $row3['exp'];
                            }
                            if ($currentEXP == 0 or $currentEXP == null) {
                                echo "0";
                            }else {
                            echo $currentEXP;}
                            ?></td>
                        <!-- Rank -->
                        <td><?php
                            $currentRank = "";
                            $accId = get_id_from_name($row['name']) -> fetch_assoc()['id'];
                            $table = "SELECT `rank` FROM `accounts` WHERE `id`=$accId";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row4 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $currentRank += $row4['rank'];
                            }
                            echo $currentRank;
                            ?></td>
                        <!-- Characters -->
                        <td><?php
                            $charamount = 0;
                            $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "select * from characters where accId=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row5 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $charamount++;
                            }
                            echo $charamount;
                            ?></td>
                        <!-- Average Fame/Char -->
                        <td><?php
                            $allFameAddedUp = 0;
                            $charCount = 0;
                $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "select * from characters where accId=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row6 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $allFameAddedUp += $row6['fame'];
                                $charCount++;
                            }
                            if ($allFameAddedUp == 0) {
                                echo "0";
                            }else {
                            echo $allFameAddedUp / $charCount;
                            }
                            ?></td>
                        <!-- Average EXP/Char -->
                        <td><?php
                            $allEXPAddedUp = 0;
                            $charCount1 = 0;
                $accId = get_id_from_name($row['name'])->fetch_assoc()['id'];
                            $table = "select * from characters where accId=$accId and dead=0";
                            $query = $pdo->query($table) or die('An error occurred.');
                            while ($row7 = $query->fetch(PDO::FETCH_ASSOC))
                            {
                                $allEXPAddedUp += $row7['exp'];
                                $charCount1++;
                            }
                            if ($allEXPAddedUp == 0) {
                                echo "0";
                            }else {
                                echo $allEXPAddedUp / $charCount1;
                            }
                            ?></td>
                        <!-- Last seen-->
                        <td>
                            <abbr title="<?= SERVER_NAME ?>">
                                FSOD
                            </abbr>
                        </td>
                    </tr>
                    <?php $count++; } ?>
                </tbody>
            </table>
        </div>
    </div>
</div>
<script src="js/jquery-1.11.2.min.js"></script>
<script src="js/typeahead.bundle.js"></script>
<script src="js/bootstrap.min.js"></script>
<script src="js/jquery.timeago.js"></script>
<script src="js/jquery.timeago.en-short.js"></script>
<script src="js/definition.js"></script>
<script src="js/jquery.tablesorter.js"></script>
<script src="js/realmeye.js"></script>
<script type="text/javascript">
    $(function () {
            initializeSearch("a");
        }
    );
    initializeClickHandlerWithAction("b", {
            "type": "POST",
            "url": "\/logout",
            "data": {}
        }
    );
    makeSortable("c", {
            0: {
                "sorter": "digit"
            }
            ,
            1: {
                "sorter": "text"
            }
            ,
            2: {
                "sorter": "text"
            }
            ,
            3: {
                "sorter": "digit"
            }
            ,
            4: {
                "sorter": "digit"
            }
            ,
            5: {
                "sorter": "digit"
            }
            ,
            6: {
                "sorter": "digit"
            }
            ,
            7: {
                "sorter": "digit"
            }
            ,
            8: {
                "sorter": "digit"
            }
            ,
            9: {
                "sorter": "text"
            }
            ,
            10: {
                "sorter": "text"
            }
        }
    );
    renderNumeric("c", 1);
    renderNumeric("c", 4);
    renderNumeric("c", 5);
    renderNumeric("c", 6);
    renderNumeric("c", 7);
    renderNumeric("c", 8);
    renderNumeric("c", 9);
</script>
<script type="text/javascript">
    var _gaq = _gaq || [];
    _gaq.push(["_setAccount", "UA-36039145-1"]);
    _gaq.push(["_setSiteSpeedSampleRate", 10]);
    _gaq.push(["_setSampleRate", "80"]);
    _gaq.push(["_gat._anonymizeIp"]);
    _gaq.push(["_setCustomVar", 1, "ssl", /^https/.test(window.location.href) ? "yes" : "no"]);
    _gaq.push(["_trackPageview"]);

    (function () {
        var ga = document.createElement("script");
        ga.type = "text/javascript";
        ga.async = true;
        ga.src = ("https:" == document.location.protocol ? "https://ssl" : "http://www") + ".google-analytics.com/ga.js";
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(ga, s);
    })();
</script>
</body>
</html>

3 个答案:

答案 0 :(得分:8)

如果你注意到,1)你的脚本中没有connect_db(),2)你的功能正在创建$pdo但仍然返回$db,所以即使你使用connect_db()它什么都不会回报:

function connect_db()
{
    $pdo = new PDO('mysql:host='.HOST.';dbname='.DB,USER,PASS);
    // You need to return $pdo not $db
    return $pdo;
}

编辑:由于您可能在整个页面中使用或未使用该连接,因此您可能需要在顶部创建您的功能并将其输入您正在使用的任何功能,特别是此部分: $accounts = $type == 'all' ? get_accounts() : get_accounts();

顺便说一句,这个三元组没有任何意义,无论如何都要在truefalse分配函数:

// You are saying if 'all', use 'get_accounts()' but if not 'all' use it 'get_accounts()' as well...
$accounts = $type == 'all' ? get_accounts() : get_accounts();

要修复,只需执行:

$con = connect_db();
$accounts = get_accounts($con);

我注意到您在页面上使用$pdo,因此您可能希望更改为$pdo

$pdo = connect_db();
$accounts = get_accounts($pdo);

答案 1 :(得分:2)

你需要这样做:

$pdo = connect_db()

之后才能使用$pdo变量。

您还需要修复connect_db(),以便返回它指定的相同变量。

答案 2 :(得分:1)

永远不会调用

connect_db(),因此您的$ pdo变量保持未初始化状态。当您第一次调用$pdo->query()时,PHP会抱怨$ pdo不是对象。