2016-07-11 4 views
0

Я не уверен, что это только я, но всякий раз, когда я пытаюсь использовать метод include, он терпит неудачу.Включить не работает в классах?

<?php 
    include_once 'db.php'; 
    class Cookies{ 
     public function Verify($Cookie){ 
      echo($dbh); 
      $CookieStmt = $dbh->prepare("SELECT * FROM Cookies WHERE Cookie=:cookie"); 
      $CookieStmt->bindParam(":cookie",$Cookie); 
      $CookieStmtExe = $CookieStmt->execute(); 
      if($CookieRow=$CookieStmtExe->fetch(PDO::FETCH_ASSOC)){ 
       if($CookieRow['EndDate']>time()){ 
        return true; 
       }else{ 
          return false; 
         } 
         } else{ 
        return false; 
       } 

     } 
} 
     ?> 

Я также попытался include внутри функции Verify, но он всегда будет эхо из: Примечание: Undefined переменной: ДБГ на линии 5

И да я определил $dbh в db.php

ОБНОВЛЕНИЕ: Я даже попробовал прямое соединение, и он все еще не работает

$dbh = new PDO('mysql:host=127.0.0.1;dbname=baheeg', 'root', ''); 
class Cookies{ 
    public function Verify($Cookie){ 
     echo($dbh); 
     $CookieStmt = $dbh->prepare("SELECT * FROM Cookies WHERE Cookie=:cookie"); 
     $CookieStmt->bindParam(":cookie",$Cookie); 
     $CookieStmtExe = $CookieStmt->execute(); 
     if($CookieRow=$CookieStmtExe->fetch(PDO::FETCH_ASSOC)){ 
      if($CookieRow['EndDate']>time()){ 
       return true; 
      }else{ 
         return false; 
        } 
        } else{ 
       return false; 
      } 

    } 
} 

ответ

1

Проблема - это переменная область. Поскольку вы назначаете переменную $dbh вне функции, она недоступна внутри функции, если вы не используете объявление global.

<?php 
include_once 'db.php'; 
class Cookies{ 
    public function Verify($Cookie){ 
     global $dbh; 

     echo($dbh); 
     $CookieStmt = $dbh->prepare("SELECT * FROM Cookies WHERE Cookie=:cookie"); 
     $CookieStmt->bindParam(":cookie",$Cookie); 
     $CookieStmtExe = $CookieStmt->execute(); 
     if($CookieRow=$CookieStmtExe->fetch(PDO::FETCH_ASSOC)){ 
      if($CookieRow['EndDate']>time()){ 
       return true; 
      }else{ 
       return false; 
      } 
     } else{ 
      return false; 
     } 
    } 
} 
?> 

Вы также можете поместить include заявление внутри функции, но тогда вы должны использовать include, не include_once, потому что он будет включен только в первой функции, которую вы называете, и другие будут его пропустить.

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