2013-02-04 55 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