不在对象的上下文错误时使用$ this

时间:2015-04-01 10:49:50

标签: php mysql pdo

这里我有一个名为DB的类,它用于准备一个pdo语句,然后在PDO对象上执行selectinsert等。在这里我试图insert收集一些数据一个html表单。但是当我执行代码时,它给了我在问题中提到的错误。 getInstance()insert()都是公共静态函数。任何人都可以帮我解决这个问题吗?

class DB{
        private static $_instance=null;
        private $pdo,
                $query,
                $error=false,
                $results,
                $count=0;
        private function __construct(){
                try{

                    $this->pdo=new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/user'),Config::get('mysql/password'));


                }catch(PDOException  $e){
                    echo $e->getMessage();
                }
        }
        public static function getInstance(){
            if(!isset(self::$_instance)){
                  self::$_instance=new DB();
            }
            return self::$_instance;
        }

        private function bind($val){
               $i=1;
               foreach($val as $data){

                   $this->query->bindValue($i,$data);

               }
               $i++;

        }
        public static function insert(){
            $stmt='INSERT INTO users (username,password,name) VALUES (?,?,?)';
            if($this->query=$this->pdo->prepare($stmt)){
                $val=Validate::send();
                $this->bind($val);
                if($this->query->execute()){

                   return 'successfull';
                }
            }
        }
    } 

我调用了它们:

if(isset($_POST['submit'])){
        $insert=DB::getInstance();
        $insert::insert();
    }   

1 个答案:

答案 0 :(得分:1)

您在静态功能中使用$ this。这就是你得到错误的原因。

删除"静态"在"插入()"前面然后拨打$insert->insert();