當我使用PDO選擇通過AJAX調用發送的數據時,我的PHP中出現Call to a member function prepare() on a non-object
錯誤。PHP選擇PDO調用成員函數prepare()對非對象錯誤
在StackOverflow上搜索我發現了很多這個錯誤的答案,但都沒有解決我的問題。
奇怪的是,其他PHP文件使用相同的PDO調用,併成功地工作,但這只是給我的非對象錯誤。
請注意,PDO連接與其他工作網頁相同,所以我知道這不會導致問題。
此外,我測試了發送的AJAX數據正在接收,這也正在工作。
PHP代碼
$mysql_user = "NotTelling";
$mysql_password = "DefinatelyNotThis";
try
{
$dbh = new PDO("mysql:host=somehost;dbname=somename", $mysql_user, $mysql_password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$username = $_POST['username'];
$inPword = $_POST['password'];
$lat = $_POST['lat'];
$lon = $_POST['lon'];
$loggedin = "";
$password_hash = "";
$loggedinstatus = "";
$pts = "";
function getLoginInfo()
{
$sth = $dbh -> prepare('SELECT pword, loggedin, points FROM login WHERE uname = :uname');
$sth->bindParam(':uname', $username, PDO::PARAM_STR);
while($row = $sth->fetch(PDO::FETCH_ASSOC))
{
echo $row['pword'];
echo $row['loggedin'];
echo $row['points'];
}
$password_hash = $fetch['pword'];
$loggedinstatus = $fetch['loggedin'];
$pts = $fetch["points"];
if($password_hash === null || $loggedinstatus === null || $pts === null)
{
die(json_encode(array("message" => "none")));
}
else
{
return "more";
}
}
function checkLoginCreds()
{
if(crypt($inPword, $password_hash) === $password_hash)
{
switch($loggedinstatus)
{
case "no":
$sel = $dbh->prepare("UPDATE login SET loggedin='yes' WHERE uname = ?");
$sel->execute(array($username));
return "AllGood";
break;
defaut:
return "alreadyin";
break;
}
}
else
{
return "BadLogin";
}
}
if(getLoginInfo() === "more")
{
echo json_encode(array("message" => checkLoginCreds()));
}
getLoginInfo();
}
catch(PDOException $e)
{
echo $e->getMessage();
file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
最後,這裏的輸出,當我var_dump()
PDO的連接。
object(PDO)#1 (0) {}
'$ dbh'沒有在你的函數中定義。 – andrewsi
固定格式@andrewsi – copilot0910
你應該定義整個事情在一個類或連接到數據庫中的每個功能,需要DB連接.. –