2017-09-20 1 views
1

J'ai essayé de créer la connexion à la base de données en tant que classe.Créer une connexion db en tant que classe et utiliser dans l'instruction prepare en PHP et Mysqli

DB.class.php

class DB { 

protected $servername = 'localhost'; 
protected $username = 'root'; 
protected $password = ''; 
protected $dbname = 'my_db'; 
protected $conn ; 

public function connection(){ 

    $connection = new mysqli($this->servername,$this->username,$this->password,$this->dbname); 

    if (mysqli_connect_errno()){ 
     echo 'db error'.mysqli_connect_error(); 
     exit(); 
    } 
    $this->conn = $connection; 
    return $this->conn; 
} 
} 

Il semble qu'il n'y a pas de problème avec cette classe. Je veux utiliser cette classe dans un autre fichier qui est query.php

include 'DB.class.php'; 

$connection = new DB(); 
$connection->connect($connection); 

$stmt = $connection->prepare("INSERT INTO MyGuests (name, gender, email, 
town) VALUES (?, ?, ?, ?)"); 
$stmt->bind_param("ssss", $name, $gender, $email, $town); 

$name = 'ex_name'; 
$gender = 'female'; 
$email = '[email protected]'; 
$town = 'colombo'; 

$stmt->execute(); 
$stmt->close(); 
$connection->close(); 

Mais il continue d'afficher ce message d'erreur:

Fatal error: Call to undefined method DB::connect() 

Dois-je créer cette requête dans une classe pour éviter ce message d'erreur? Si oui, comment puis-je faire cela? Quelqu'un peut-il m'aider?

+3

Votre classe DB n'a pas de nom de la méthode « connecter » exactement comme l'erreur vous montre. Vous avez une méthode appelée 'connection' qui a l'air de devoir retourner votre handle alors essayez $ connection = new DB() -> connection(); – TommyBs

+0

Pourquoi essayez-vous de vous connecter en utilisant une connexion existante? De plus, vous réalisez que chaque fois que vous appelez 'connection()' vous créez une nouvelle connexion à la base de données? Faites ceci 1k fois et vous remarquerez le décalage et vous pourriez tuer votre serveur. – bassxzero

+0

Avez-vous une raison spécifique de créer votre propre classe 'DB'? Comme il ne semble pas offrir de fonctionnalités sur la classe 'mysqli', il vous serait beaucoup plus facile de l'utiliser. Ou PDO. – jeroen

Répondre

2

Si vous voyez votre code, n'existe pas la méthode connect, est la connexion et il a n'importe quel paramètre. Aussi est faux parce que vous passez le même décalage à lui-même.

$connection = new DB(); 

Le $connection->connect($connection); doit être $connection->connection();

+0

Puis il dit "Erreur fatale: Appel à la méthode non définie DB :: prepare()" –

+0

Ok, car il n'y a pas de méthode implémentée appelée prepare. fonction publique prepare ($ sql) { \t return $ this-> conn ($ sql); } –

+0

Et est également d'échouer avec près. fonction publique close() {$ this-> conn-> close()} –