2015-10-16 34 views
0

這是我的私人服務器realmeye的代碼http://www.thenoxusproject.org/realmeye/index.php 我一直收到這個錯誤,我不知道如何解決它,請幫忙?爲什麼我得到「致命錯誤:調用一個非對象的成員函數query()」錯誤?

Fatal error: Call to a member function query() on a non-object in /home/noxus/public_html/realmeye/index.php on line 112

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

的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> 
+0

可能重複的[mysql \ _fetch \ _array()期望參數1是資源(或mysqli \ _result),布爾給定](http://stackoverflow.com/questions/2973202/mysql-fetch-array-expects -parameter -1-待資源或-mysqli的對結果布爾)。這個問題有很多可能的重複。 –

+0

第112行沒有對象引用。如果你要在任務中突出顯示該行,將有更大的機會給出答案。但是,看起來像您的數據庫連接不成功。 – syck

+0

你永遠不會調用'connect_db()'。 – Barmar

回答

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); 
+0

那麼我該怎麼做才能解決這個問題? –

+0

使用我修改過的函數並將連接分配給一個像$ con = connect_db();' – Rasclatt

+0

這樣的變量,然後你可以像使用'$ query = $ con> prepare(「select any from wherever」)那樣使用它。 $ query-> execute();' – Rasclatt

1

connect_db()不會被調用,所以你的$ PDO變量離開uninitiallized。當你第一次打電話給$pdo->query()時,PHP抱怨$ pdo不是一個對象。

2

你需要做的:

$pdo = connect_db() 

,然後才能使用$pdo變量。

您還需要修復connect_db(),以便它返回它分配的相同變量。

+0

所以這個代碼是? 對不起,我已經花了很多的工作,我只是過度工作和困惑atm。 –

+0

'$ accounts = $ type =='all'? get_accounts():get_accounts(); while($ row = $ accounts-> fetch_assoc())'但是getaccounts()(它應該返回一個結果句柄)不包含在代碼中。 – syck

+0

@OrganizedChaos將'return $ pdo'更改爲'return $ db' – Barmar

相關問題