有一個小問題,我一直在努力一段時間。由於我不知道這裏有什麼問題,所以我考慮將它列入此列表。也許你們有些人知道更多...php/pdo/msql - 拒絕訪問
我有一個網站的登錄,檢查一個用戶和密碼對MySQL驅動的數據庫。當pdo連接在同一個文件中都可以正常工作時,可以登錄,沒有任何問題。正如它應該工作...
但是,數據庫連接部分移動到一個單獨的功能,這是我從另一個文件包含的時候,PDO失敗於我,並給我:
SQLSTATE[28000] [1045] Access denied for user '...'@'...' (using password: NO) Fatal error: Call to a member function prepare() on a non-object in /.../.../... on line 41
爲了清楚起見,這裏是代碼:
版本1:
這工作:
<?php
require "./vars_and_functions.php";
/* open database connection */
try {
$pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
/* query */
$query = "SELECT uname, passw FROM members WHERE uname = ? AND passw = ?";
$q = $pdo->prepare($query);
$q->execute(array($u_name, $p_word_md5));
$result = $q->rowCount();
if($result == 1) { /* we have a match */
/* close the database connection */
$pdo = null;
/* and redirect */
header("...");
} /* if */
else { /* wrong credentials */
/* close the database connection */
$pdo = null;
/* and go back to the login page */
header("...");
} /* else */
} /* try */
catch(PDOException $e) {
echo $e->getMessage();
} /* catch */
?>
這裏是第2版
這不起作用:
<?php
require "./vars_and_functions.php";
/* open database connection */
$pdo = database_connection();
/* query */
$query = "SELECT uname, passw FROM members WHERE uname = ? AND passw = ?";
$q = $pdo->prepare($query);
$q->execute(array($u_name, $p_word_md5));
$result = $q->rowCount();
if($result == 1) { /* we have a match */
/* close the database connection */
$pdo = null;
/* and redirect */
header("...");
} /* if */
else { /* wrong credentials */
/* close the database connection */
$pdo = null;
/* and go back to the login page */
header("...");
} /* else */
} /* try */
catch(PDOException $e) {
echo $e->getMessage();
} /* catch */
?>
我includefile vars_and_functions.php看起來是這樣的:
$db_host = "...";
$db_name = "...";
$db_user = "...";
$db_pass = "...";
function database_connection() {
try {
$pdo = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
}
catch(PDOException $e) {
echo $e->getMessage();
}
return $pdo;
}
我心中唯一的真正的區別在於在這裏,pdo連接是通過函數調用完成的,而函數位於include文件vars_and_functions.php中。
這裏有什麼問題?
啓用'error_reporting',它會告訴你變量在函數局部變量作用域中不可用。 – mario
好吧,我意識到代碼的顯示在這裏看起來有點雜亂。我正在努力解決這個問題... – user1803765