2012-12-03 78 views
1

我在PHP編程相當的經驗,併爲副作用小的項目,我做我想從查詢與來自另一個表的數據一併返回數據

我做了我自己的SQL數據庫中獲取的一些信息處理程序,與單身人士,所以連接不會溢出。

這是我的查詢功能:

<?php  
public static function query($q){ 
     $a = ''; 
     $b = ''; 
     self::$queries[] = $q; 
     if(strpos($q, 'INSERT') !== false){ 
      if(!mysql_query($q)){ 
       self::$err[] = mysql_error()."<br />Query: ".$q; 
       return false; 
      } 
      return true; 
     } elseif(strpos($q, 'SELECT') !== false){ 
      echo $q; 
      if(!$res = mysql_query($q)){ 
       self::$err[] = mysql_error()."<br />Query: ".$q; 
      return false; 
      } else { 
       if(mysql_num_rows($res) > 1){ 

        while($r = mysql_fetch_assoc($res)){ 
         foreach($r as $key => $val){ 
          self::$results[$r['id']][$key] = $val; 
         } 
        } 
        return self::$results; 
       } else { 
        $res = mysql_fetch_assoc($res); 
        foreach($res as $key => $val){ 
          self::$results[$res['id']][$key] = $val; 
        } 
        return self::$results; 
       } 
      } 
     } elseif(strpos($q, 'UPDATE') !== false){ 
      if(!mysql_query($q)){ 
       self::$err[] = mysql_error()."<br />Query: ".$q; 
      return false; 
      } 
      return true; 
     } elseif(strpos($q, 'DELETE') !== false){ 
      if(!mysql_query($q)){ 
       self::$err[] = mysql_error()."<br />Query: ".$q; 
      return false; 
      } 
      return true; 
     } 
    } 
?> 

現在我想從我創建了一個表中的一些數據(表包含2個外鍵) 表:

CREATE TABLE IF NOT EXISTS `loc_npc` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `loc_id` int(11) NOT NULL, 
    `npc_id` int(11) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `loc_id` (`loc_id`), 
    KEY `npc_id` (`npc_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 

ALTER TABLE `loc_npc` 
    ADD CONSTRAINT `loc_npc_ibfk_2` FOREIGN KEY (`npc_id`) REFERENCES `npcs` (`id`), 
    ADD CONSTRAINT `loc_npc_ibfk_1` FOREIGN KEY (`loc_id`) REFERENCES `locations` (`id`); 

的問題時,我運行這個查詢SELECT id, loc_id, npc_id FROM loc_npc WHERE loc_id = 9 它是以某種方式從另一個表返回數據,aswel作爲正確的數據。

查詢是跑其他處理:

public function getLocationNpc($id){ 
    //return $this->sql->query("SELECT e.`name`, e.`desc`, e.`id` FROM npcs e LEFT JOIN(loc_npc i CROSS JOIN locations l) ON (e.id = i.npc_id AND i.loc_id = l.id) WHERE i.loc_id = $id"); 
    $npcH = new npcHandler(); 
    $npcId = $this->sql->query("SELECT id, loc_id, npc_id FROM loc_npc WHERE loc_id = $id"); 
    echo '<pre>'.print_r($npcId, true).'</pre>'; 
    foreach($npcId as $nId){ 
     $npcArr[] = $npcH->getNpc($nId['npc_id']); 
    } 
    return $npcArr; 
} 

我測試在phpMyAdmin查詢,它只是返回正確的數據,不像查詢通過我的處理程序執行。

我很確定這是一個小而愚蠢的東西,但我似乎無法找到它。

+0

請不要在標題中添加標籤。 – vascowhite

+0

歡迎來到Stack Overflow! [請不要在新代碼中使用'mysql_ *'函數](http://stackoverflow.com/q/12859942)。它們不再被維護,並且已經開始棄用過程,請參閱[紅盒子](http://php.net/mysql-connect)。請改爲了解[準備好的語句](http://en.wikipedia.org/wiki/Prepared_statement),並使用[PDO](http://php.net/pdo)或[MySQLi](http:// php。淨/ mysqli的); [這篇文章](http://php.net/mysqlinfo.api.choosing)將幫助你決定。如果你選擇PDO,[這裏是一個很好的教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 – vascowhite

+0

對不起,新來張貼在stackoverflow上。 – candanz

回答

0

您似乎沒有在任何地方清除self::$results的內容 - 您是否從先前運行的查詢中獲得了結果?

+0

哦,我的上帝,這固定它。謝謝!我是個白癡......哈哈 – candanz

相關問題