2014-02-22 244 views
0

裏面我是新來的OOP和PDO的世界和一個函數返回的數據和想要使用另一個函數內部時,只需要有點手。如何使用陣列從一個功能,其他功能

下面是我的功能,從我的數據庫中獲取所有壁虎數據,此刻我打印出陣列,所以我知道它的工作。

功能getGecko:

public function getGecko($geckoName){ 
    $dbh = $this->dbh; 
    try { 
     if (!$geckoName) { 
      throw new Exception("No gecko name set!"); 
     } 
     $stmt = $dbh->query("SELECT * FROM geckos WHERE gecko_name = '$geckoName'"); 
     $stmt->setFetchMode(PDO::FETCH_ASSOC); 
     $row_count = $stmt->rowCount(); 
     $row = $stmt->fetch(); 

     if($row_count > 0){ 
      print_r($row); 
      return true; 
     } else { 
      echo 'No information found for '.$geckoName.'!'; 
      return false; 
     } 
    } 
    catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
} 

其作爲輸出 - Array ([gecko_id] => 1 [gecko_name] => Zilly [gecko_aquisition_date] => 0000-00-00 [gecko_type] => Normal [gecko_gender] => Male [gecko_traits] => [gecko_bio] => Hench bastard [gecko_health_check] => All good! [gecko_bred] => 0 [gecko_hatchling] => 0 [gecko_clutch] => [gecko_photo] =>) - 沒有問題。

但我想在一個名爲getMorph的函數內使用這個數據來利用[gecko_type] => Normal。我曾嘗試過這樣的事情:

public function getMorph($geckoName){ 
    $this->getGecko($geckoName); 
    echo $row['gecko_type']; 
} 

但它什麼也沒有返回。我很習慣從程序的角度來說,我只是想讓自己和我的代碼更好,並希望陷入OOP。我很抱歉,如果這被認爲是'noob'的問題,但正如我所說,我正在努力學習。

感謝您的時間:)

+0

哪裏是定義$行在getMorph?你應該返回一個變量的東西? $這 - > getGecko($ geckoName);返回true,但永遠不會給變量 –

回答

2

與你的第一個功能的問題是,你正在返回一個布爾值。沒有實際的數據被返回。此外,在getMorph()函數中,您試圖使用$row變量。這將不起作用,因爲$row變量僅存在於函數getGecko()的本地範圍內。這實際上會導致PHP打印一條錯誤消息。如果你啓用了error reporting,你會發現這一點。

要解決這個問題,你可以修改你的第一個功能回報數組:

if($row_count > 0){ 
     // print_r($row); 
     return $row; 
    } else { 
     echo 'No information found for '.$geckoName.'!'; 
     return false; 
    } 

然後,在你的第二個功能,您可以訪問陣列像這樣:

public function getMorph($geckoName){ 

    // $morph now contains the entire array 
    // returned by the other function 
    $row = $this->getGecko($geckoName); 

    // output the array contents 
    echo '<pre>' . print_r($row, TRUE), '</pre>'; 

    // return the specific gecko_type value 
    return $row['gecko_type']; 
} 

我建議你閱讀variable scope。這將非常有用。此外,與上述問題完全無關,您直接將用戶輸入插入到您的SQL查詢中。 不要這樣做!改爲使用參數化查詢 - 這樣,您就可以避開SQL injection attacks

下面的問題進行了詳細介紹關於這個問題:

+0

這應該解決它 –

+0

這給了我所有這些(從轉儲)數組(12){[「gecko_id」] =>字符串(1)「1」[「gecko_name」] = > string(5)「Zilly」[「gecko_aquisition_date」] => string(10)「0000-00-00」[「gecko_type」] => string(6)「Normal」[「gecko_gender」] => string(4 )「Male」[「gecko_traits」] => NULL [「gecko_bio」] => string(13)「Hench bastard」[「gecko_health_check」] => string(9)「All good!」 [「gecko_bred」] => string(1)「0」[「gecko_hatchling」] => string(1)「0」[「gecko_clutch」] => NULL [「gecko_photo」] => NULL} –

+0

但是,轉儲,它返回一個空白頁面 –

2

你的功能getGecko只返回一個布爾和$row僅在該方法的局部變量。所以你可以改變返回值來返回實際的數據,或者你可以在你的PHP類中創建一個私有變量。

爲了改變返回類型,你getGecko變化可能會返回到這樣的事情:

if($row_count > 0){ 
    // ... 
    return $row; 
} 

,然後在getMorph功能做這樣的事情:

public function getMorph($geckoName){ 
    $row = $this->getGecko($geckoName); 
    echo $row['gecko_type']; 
}