2013-02-04 56 views
2

如何在擴展類中實現mysqli?未定義變量:mysqli - PHP OOP

我的圖片上傳並存儲在MySQL數據庫中,但我得到這個錯誤:

Notice: Undefined variable: mysqli in ...ecc/ecc/ on line 33

Fatal error: Call to a member function query() on a non-object in ...ecc/ecc/ on line 33

這裏是我的測試代碼:

<?php 
    interface ICheckImage { 
     public function checkImage(); 
     public function sendImage(); 
    }   
    abstract class ACheckImage implements ICheckImage { 
     public $image; 
     private $mysqli;  
     public function _construct(){ 
      $this->image = $_POST['image']; 
      $this->mysqli = new mysqli('localhost','test','test','test'); 
     } 
    }   
    class Check extends ACheckImage { 
     public function checkImage() { 
      if($this->image > 102400) { 
       echo "File troppo grande"; 
      } 
     } 
     public function sendImage() { 
      //This is the line 33 give me the error 
      if ($mysqli->query("INSERT INTO images (image) VALUES ('$this->image')")) { 
      echo "Upload avvenuto &nbsp"; 
      } else { 
       echo "Errore &nbsp" . $mysqli->error; 
      } 
     } 
    } 
    $form = new Check(); 
    $form->checkImage();  
    $form->sendImage(); 
?> 

回答

3

有在你的代碼中的錯誤。

  1. $mysqli成員是抽象類中的私有成員。它不會被Check類繼承,所以它不存在。使其受到保護。

  2. 訪問類的成員總是需要在前面的$this->,特別是在這種情況下需要$this->mysqli

  3. 構造函數必須命名爲__construct,前面帶兩個下劃線。

  4. 圖像檢查看起來不對。 $ _POST ['image']確實包含您希望存儲在數據庫中的某些內容,但是您還會將其與一個整數值進行比較,並且如果它較大,似乎會回顯一條錯誤消息。儘管數據處理可以工作,例如你可以比較POST數據中的一個字符串和一個整數,它看起來像你想要的東西。

+2

...... OP還需要直接引用'$ this-> mysqli-> query()',而不是'$ mysqli'(局部變量)。 – MrWhite

+0

謝謝,第一個錯誤通過:) ,但現在給我同樣的錯誤 致命錯誤:調用一個成員函數查詢()在非線對..ecc/.. ecc /在線33 – starbuck

+0

@ user2041211:你似乎沒有從擴展類調用父構造函數(建立數據庫連接)? (該錯誤表明您沒有數據庫連接。) – MrWhite