2017-09-20 5 views
1

클래스로 데이터베이스 연결을 만들려고했습니다.클래스로 db 연결을 만들고 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'이라는 메소드를 가지고 있으므로 $ 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

준비라는 메서드가 구현되어 있지 않기 때문에 좋습니다. 공용 함수 준비 ($ sql) { \t 반환 $ this-> conn ($ sql); } –

+0

또한 닫을 때 실패하는 것입니다. public function close() {$ this-> conn-> close()} –