我試圖將我所有的mysqli轉換爲PDO,但我用PDO很綠,而且我的問題可能是基本的。我在切換的第一個查詢時遇到問題。我需要幫助在PHP中使用函數中的類
這是我的設置。在我的login.php,我調用一個函數,像這樣:
的login.php
$user = attempt_login($username, $password);
我包含的功能頁面加載此:
funcs.php
function attempt_login($username, $password) {
$user = find_user_by_username($username);
if ($user) {
if (password_check($password, $user["salt"], $user["password"])) {
...
}
然後它指的是給我所有錯誤的函數:
function find_user_by_username($username) {
$db = new Database();
$db->dbc();
$sql = "SELECT * FROM users WHERE username = :usr";
$stmt = $db->prepare($sql); // *** this is line 157
$stmt->bindParam('usr', $username, PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result;
}
我的類來踢東西了:
db_connection.php
class Database
{
private $dbc;
public function __construct()
{
try {
$db_host = ' '; // hostname
$db_name = ' '; // databasename
$db_user = ' '; // username
$db_pass = ' '; // password
$dbc = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $db_pass);
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $err) {
$err->getMessage();
}
}
public function dbc()
{
return $this->dbc;
}
}
數據庫可以連接。我只是不想在我的函數中使用Globals,但是我覺得錯誤意味着我需要在我的函數頁面中使用globabls。以下是錯誤:
Fatal error: Call to undefined method Database::prepare() in funcs.php on line 157
我的問題是,我這樣做都是錯的意思,我應該把我所有的功能類也,還是我只是簡單的東西?再次,我只是想在我的函數中使用PDO,並避免使用全局變量。
其中是:usr?,它是您想要的變量,如$ db $ dbc之類的,而不是 - >數據庫中的一個類。你有一個$ db,$ dbc,有點搞砸了 – Drew
在你的'Database :: __ construct()'你設置爲'$ dbc'而不是'$ this-> dbc'。然後在'function find_user_by_username($ username)'中,您需要將'$ db-> dbc();'更改爲'$ db = $ db-> dbc();' – Sean
@Sean工作正常。但現在我需要處理VolkerK的建議。我以爲我可能會犯這樣的錯誤。 – Reveren