내 코드에서 "null에 대한 구성원 함수 호출 (call on a member function prepare()"을 일으킬 수있는 원인을 파악하려고합니다. , 그러나 나는 그것이 일어나고있는 이유를 이해할 수 없다. 여기에 내 현재 코드 :"null에서 멤버 함수 호출"오류가 발생하지만 데이터가 여전히 데이터베이스에 추가되었습니다.
$password_hash = password_hash($this->password, PASSWORD_DEFAULT);
$sql = 'INSERT INTO users (name, email, password_hash)
VALUES (:name, :email, :password_hash)';
$db = static::getDB();
$stmt = $db->prepare($sql); //This is the line specified in the error
$stmt->bindValue(':name', $this->name, PDO::PARAM_STR);
$stmt->bindValue(':email', $this->email, PDO::PARAM_STR);
$stmt->bindValue(':password_hash', $password_hash, PDO::PARAM_STR);
$stmt->execute();
코드가 $db
를 얻을 수있는 것은 여기에 있습니다 :이 코드에
$dsn = 'mysql:host='.Config::DB_HOST.';dbname='.Config::DB_NAME.';charset=utf8';
$db = new PDO($dsn, Config::DB_USER, Config::DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $db;
값은 모든 올바른 데이터와 설정 파일에서입니다. 가장 혼란스러운 것은 양식 입력이 제출 될 때이 오류가 발생한다는 것입니다. 양식 항목의 데이터가 데이터베이스에서 끝나기 때문에 연결 및 데이터가 정확하다는 것을 알 수 있지만이 오류는 계속 팝업되어 내 코드가 성공 화면으로 돌아 가지 않습니다.
업데이트 : 여기
은 static::getDB()
의 전체 정적 함수입니다 :
abstract class Model
{
protected static function getDB()
{
static $db = null;
if ($db === null) {
$dsn = 'mysql:host=' . Config::DB_HOST . ';dbname=' . Config::DB_NAME . ';charset=utf8';
$db = new PDO($dsn, Config::DB_USER, Config::DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
return $db;
}
}
$ db 변수가 초기화되었는지 확인 했습니까? –
구체적으로 확인하지는 않았지만 데이터베이스에 양식 데이터를 추가 할 수 있으므로 가정합니다. –
'$ db = static :: getDB(); 이것은 틀린 것 같습니다. 통화 상황을 볼 수 있습니까? – bassxzero