Ich habe eine PHP-Datei, in der ich eine Funktion habe, die (neben anderen Sachen) eine Select-Abfrage ausführt. Jetzt, bevor diese Select-Abfrage stattfinden kann, muss ich mich natürlich erst mit der db verbinden. Dazu versuche ich derzeit, die folgenden connectdb.php
innerhalb der Funktion direkt vor der Select-Abfrage, aber es schlägt fehl/keine Verbindung zur db. Der Inhalt der connectdb.php
:Verbinden mit DB in einer Funktion über Include-Klasse (mit dem Verbindungsteil)
<?php
require_once 'configdb.php'; // contains my database credentials
//Connect To Database
class connectdb
{
public function __construct($dsn, $user, $pw){
$this->pdo = $pdo;
if ([email protected]$this->connect($dsn, $user, $pw)){
echo "Failed.";
} else {
echo "Successful.";
}
}
public function connect($dsn, $user, $pw){
try {
$pdo = new PDO($dsn, $user, $pw);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
$e->getMessage();
}
}
}
$connect = new connectdb($dsn, $user, $pw);
$connect->connect($dsn, $user, $pw);
?>
Der Fehler, der die folgenden Auswahlabfrage bezieht, die hat sie offensichtlich nicht in der Lage gewesen, eine Verbindung mit dem db zu bekommen, ist:
Fatal error: Call to a member function prepare() on a non-object in /var/www/xxx/html/xxx/index.php on line 753
Ich weiß nicht, wo ich den Fehler in der connectdb.php
- schon beobachtete php Videos darüber gefunden und versucht, den Code für meine Bedürfnisse zu übernehmen, aber immer noch, es ist ein Fehler. Ich habe auch versucht die folgende (funktioniert auch nicht):
<?php
require_once 'configdb.php';
class connectdb
{
public function __construct($dsn, $user, $pw){
try {
$pdo = new PDO($dsn, $user, $pw);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
$e->getMessage();
}
}
}
$connect = new connectdb($dsn, $user, $pw);
?>
EDIT - Code, der funktioniert jetzt -: Was ich zur Zeit verwenden, und was das Problem oben angezeigt löst. The database.php
:
<?php
//Class, which includes the connection function along other query functions
class Database{
// variables DB_HOSt, DB_USER etc. have been defined in an external file
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $error;
public function __construct(){
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=utf8';
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
);
// Create a new PDO instanace
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
// Catch any errors
catch(PDOException $e){
$this->error = $e->getMessage();
}
}
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null){
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
public function execute(){
return $this->stmt->execute();
}
public function resultset(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
(...)
}
?>
Und die index.php
Datei mit der Abfrage:
require_once ('../configdb.php');
require_once ('../database.php');
$database = new Database();
$selectsubjectsquery = "SELECT faecher.fach, klassen.klasse_id FROM faecher
LEFT JOIN
lehrer_faecher
ON
faecher.fach_id = lehrer_faecher.fach_id
LEFT JOIN
klassen
ON
lehrer_faecher.klasse_id = klassen.klasse_id
WHERE
lehrer_id = :lehrer AND lehrer_faecher.fach_id != :fach AND lehrer_faecher.fach_id != '11'";
$database->query ($selectsubjectsquery);
$database->bind(':lehrer', $lehrer);
$database->bind(':fach', $fach);
$teachersubjects = $database->resultset();
Welche Werte übergeben Sie in den Konstruktor für connectdb? – Drumbeg
Hallo Drumbeg, Ich gebe die Datenbank-Anmeldeinformationen '$ dsn' (einschließlich Host-Name und Datenbank-Name),' $ Benutzer' (Benutzername) und '$ pw' (Passwort). Diese werden von 'configdb.php' durch die Codezeile' require_once 'configdb.php'; ' – Franky2207
gegeben. Wo rufst du' prepare() '? Außerdem ist Ihre '$ pdo'-Variable * nur * innerhalb Ihrer' connect() '(oder' __construct() ') Funktion zugänglich. Sie möchten stattdessen '$ this-> pdo' (oder ähnlich) setzen, damit Sie auf diese Variable außerhalb dieser Funktionen zugreifen können. –