我不确定这是否只是我,但是每当我尝试使用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;
}
}
}
?>
我也尝试过在函数Verify
内部include
,但它总是会回显出来: 注意:未定义的变量:第 5 行的 dbh
是的,我已经在db.php
中定义了$dbh
更新:我什至尝试了直接连接,但仍然失败
$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;
}
}
}
问题是可变作用域。由于在函数外部分配变量$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
,因为它只会包含在您调用的第一个函数中,其他函数将跳过它。