2013-12-11 3 views
0

У меня есть следующий класс:Как вызвать переменную PDO внутри метода класса?

<?php 

    require_once($_SERVER['DOCUMENT_ROOT']. '/wp-content/themes/quest/wahoo/common.php'); 


    class TestingClass 
    { 
     private function InsertUser() 
     { 
      $query = "EXEC dbo.InsertUser @Title = @sTitle, -- varchar(50) 
             @FirstName = @sFirstName, -- varchar(100) 
             @MiddleName = @sMiddleName, -- varchar(100) 
             @LastName = @sLastName, -- varchar(100) 
             @Gender = @sGender, -- varchar(20) 
             @DOB = @sDOB, -- datetime 
             @Email = @sEmail, -- varchar(200) 
             @Phone = @sPhone, -- varchar(50) 
             @Mobile = @sMobile, -- varchar(50) 
             @HomeAddress = @sHomeAddress, -- varchar(100) 
             @HomePostCode = @sHomePostCode, -- varchar(10) 
             @HomeSuburb = @sHomeSuburb, -- varchar(50) 
             @HomeState = @sHomeState, -- varchar(20) 
             @HomeCountry = @sHomeCountry, -- varchar(200) 
             @BrowserDetails = @sBrowserDetails, -- varchar(500) 
             @IsActive = @sIsActive, -- bit 
             @Password = @sPassword, -- varchar(500) 
             @Salt = @sSalt, -- varchar(50) 
             @LastLogin = GETDATE(), -- datetime 
             @CompanyID = @sCompanyId, -- int 
             @Created = GETDATE(), -- datetime 
             @CreatedBy = user, -- varchar(50) 
             @LastModified = NULL, -- datetime 
             @LastModifiedBy = NULL, -- varchar(50) 
             @UserName = @sUserName, -- varchar(50) 
             @UserRole = 'user' -- varchar(30)"; 


      $query_params = array(
       ':username' => $_POST['username'] 
      ); 

      try 
      { 

       $stmt = $db->prepare($query); 
       $result = $stmt->execute($query_params); 
      } 
      catch(PDOException $ex) 
      { 
       // Note: On a production website, you should not output $ex->getMessage(). 
       // It may provide an attacker with helpful information about your code. 
       die("Failed to run query: " . $ex->getMessage()); 
      } 

      // display json encode on the page for AJAX to read 
      echo json_encode($result); 
     } 
    } 
?> 

Что с этой линии:

$stmt = $db->prepare($query); 

Я пытаюсь использовать следующую переменную PDO из моего общего файла:

$db = new PDO ("sqlsrv:server = tcp:$host; Database = $dbname", "$username", "$password"); 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

I может сделать это просто отлично за пределами класса, но как только я буду внутри метода класса и попытаюсь использовать $ db, мне говорят, что переменная не определена. Есть ли способ, я все еще могу сделать это, не прибегая к использованию глобальной переменной (тем более, что я хочу переместить мой общий файл за пределами wwwroot)?

ответ

4

Pass переменную в класс:

class TestClass { 
    private $db = null; 
    public function __construct($db){ 
     $this->db = $db; 
    } 
    public function executeSomething(){ 
      // you can now use $this->db as your PDO object 
      // $db = $this->db; 
      // $stmt = $db->prepare('sql code'); 
    } 
} 

$db = new PDO('...'); 

$instance = new TestClass($db); 
$instance->executeSomething(); 
+0

Закрыть, однако я получаю сообщение об ошибке: Catchable фатальная ошибка: Объект класса PDO не может быть преобразован в строку в C: \ DWASFiles \ сайтов \ junglegym \ VirtualDirectory0 \ site \ wwwroot \ wp-content \ plugins \ qcore \ qcore_waitress.php в строке 38 – Codingo

+0

Просьба предоставить некоторый код, так как я тестировал это, и он работал. Заполните строку соединения в PDO ('') и попробуйте запрос типа $ db = $ this-> db; $ stmt = $ db-> подготовить ('SELECT * FROM tablename'); $ stmt-> execute(); var_dump ($ stmt-> fetchAll()); – NLZ

Смежные вопросы