2017-09-20 22 views
1

クラスとしてデータベース接続を作成しようとしました。データベース接続をクラスとして作成し、PHPとMysqliのprepare文で使用

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; 
} 
} 

このクラスとはすべての問題が存在しないようです。私は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(); 

ある別のファイルにこのクラスを使用したいが、それが示すこのエラーメッセージ保つ:

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

は、私は、このエラーメッセージを回避するには、クラス内でこのクエリを作成する必要がありますか?はいの場合はどうすればいいですか?誰かが私を助けることができます!

+3

エラーがあなたを示しとおりに「接続」でなければなりません。あなたはあなたのハンドルを返すべきであるように見える '接続'と呼ばれるメソッドを持っているので、$ connection = new DB() - > connection();を試してください。 – TommyBs

+0

なぜあなたは既存の接続を使用して接続しようとしていますか?また、あなたはあなたが 'connection()'と呼ぶたびに新しいデータベース接続を作成していることに気付きましたか?これを1k回実行すると、タイムラグに気づき、サーバーを強制終了する可能性があります。 – bassxzero

+0

独自の 'DB'クラスを作る特別な理由はありますか? 'mysqli'クラスに対して何の機能も提供していないようであるので、あなたはそれを使うだけでもっと簡単になります。またはPDO。 – jeroen

答えて

2

コードが表示された場合、メソッドは接続されており、接続はあり、パラメータはあります。同じオフセットを自身に渡しているので間違っています。

$connection = new DB(); 

$connection->connect($connection);

はあなたのDBクラスは何のメソッド名を持っていない $connection->connection();

+0

次に、 "致命的なエラー:未定義のメソッドDB :: prepare()"を呼び出します。 –

+0

これは、prepareというメソッドが実装されていないためです。パブリック関数prepare($ sql){ \t返す$ this-> conn($ sql); } –

+0

また、終了して失敗することもあります。 public function close(){$ this-> conn-> close()} –

関連する問題