2016-07-30 4 views
0

나는 PHP에서 OOP의 초보자이며 코드를 가지고 놀려고한다. 그래서 내가하고 싶은 첫 번째 일은 데이터베이스에 대한 연결 및 삽입 함수를 사용하여 하나의 기본 클래스를 작성하는 것입니다. 따라서 원하는 상황은 다음과 같습니다.OOP mysqli 데이터베이스 함수

- 연결 및 삽입 기능을 제어 할 클래스를 만들고 싶습니다. 문제는 my $ connect 변수가 다른 함수에서 작동하지 않는다는 것입니다. 그래서이를 가능하게하려면 어떻게해야합니까? 제공된 코드를 통해 더 많은 것을 이해할 수 있습니다.

<?php 

class DB { 
protected $dbhost = 'localhost'; 
protected $dbuser = 'root'; 
protected $dbpass = ''; 
protected $dbname = 'newdb'; 

public function connect() 
{ 
    $connect = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname); 

    if($connect->error) 
    { 
     echo "Failed to connect"; 
    } 
    else 
    { 
     echo "connected"; 
    } 
} 

public function insert($name, $second) 
{ 
    $insert = "INSERT INTO posts (name, second) VALUES ('$name', '$second')"; 

    if ($connect->query($insert) === TRUE) 
    { 
     echo "New record created successfully"; 
    } 
    else 
    { 
     echo "Error: " . $sql . "<br>" . mysqli_connect_error(); 
    } 
} 
} 
require_once 'classes/DB.php'; 

$db = new DB; 

if(isset($_POST['submit'])) 
{ 
    $name = $_POST['name']; 
    $second = $_POST['second']; 

    $db->insert($name, $second); 
} 

?> 


<form method="POST"> 
    Add smth<input type="text" name="name"><br> 
    Also omg<input type="text" name="second"><br> 
    <input type="submit" name="submit"> 
</form> 
+1

매개 변수로 전달하는 것은 어떻습니까? –

+0

그것에 대해 생각했지만 적절한 사용법을 알지 못합니다. 그래서 제가 도움을 찾고 있습니다. – Irfan

+0

'$ connect'는 해당 함수의 로컬 범위 내에 있습니다. 또한이 코드로 SQL 인젝션을 사용할 수 있습니다. 시작하면 매개 변수가있는 쿼리를 사용하여 최상의 결과를 얻는 것이 좋습니다. http://php.net/manual/en/mysqli.quickstart.prepared-statements.php – chris85

답변

1

클래스의 속성으로 $connect을 추가, 그래서 당신은 $this->connect를 사용하여 클래스 내 어디에서나 다시 사용할 수 있습니다 : 당신이 당신의 데이터베이스를 삽입 할 수 있도록

class DB 
{ 
    protected $dbhost = 'localhost'; 
    protected $dbuser = 'root'; 
    protected $dbpass = ''; 
    protected $dbname = 'newdb'; 
    protected $connect; 

    public function connect() 
    { 
     $this->connect = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname); 

     if ($this->connect->error) 
     { 
      echo "Failed to connect"; 
     } 
     else 
     { 
      echo "connected"; 
     } 
    } 

    public function insert($name, $second) 
    { 
     $insert = "INSERT INTO posts (name, second) VALUES ('$name', '$second')"; 

     if ($this->connect->query($insert) === TRUE) 
     { 
      echo "New record created successfully"; 
     } 
     else 
     { 
      echo "Error: " . $sql . "<br>" . mysqli_connect_error(); 
     } 
    } 
} 
+0

치명적인 오류 : 캐치가없는 오류 : null의 멤버 함수 query()를 호출하십시오 ... – Irfan

+0

정확히 실행하고 있습니까? – Jocelyn

+0

코드를 업데이트했습니다. 그것들은 두 개의 다른 파일이지만 괜찮습니다. 아래로 스크롤하여보십시오. – Irfan

1

나는, 조금 클래스를 다시 한 설정. 그래서 그것은 실제로 하나의 객체이며 여러 개의 데이터베이스를 사용할 수 있습니다. 클래스에서 잘못한 것은 $ connect 변수를 클래스 전체에서 사용할 수있는 변수로 선언하지 않고 사용하는 것입니다.

클래스

<?php 

class DB { 
    protected $dbhost; 
    protected $dbuser; 
    protected $dbpass; 
    protected $dbname; 
    protected $connection; 

    public function __construct($dbhost, $dbuser, $dbpass, $dbname) 
    { 
     $this->dbhost = $dbhost; 
     $this->dbuser = $dbuser; 
     $this->dbpass = $dbpass; 
     $this->dbname = $dbname; 

     $connection = new mysqli($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname); 
     if($connection->error) 
      die('Could not connect with the database!'); 

     $this->connection = $connection; 
    } 

    public function connect() 
    { 
     $this->__construct($this->dbhost, $this->dbuser, $this->dbpass, $this->dbname); 
    } 

    public function insert($name, $second) 
    { 
     $insert = "INSERT INTO posts (name, second) VALUES ('$name', '$second')"; 

     if ($this->connection->query($insert) === TRUE) 
     { 
      echo "New record created successfully"; 
     } 
     else 
     { 
      echo "Error: " . $sql . "<br>" . mysqli_connect_error(); 
     } 
    } 

    public function getConnection() 
    { 
     return $this->connection; 
    } 
} 

사용

$db = new DB('localhost', 'root', '', 'newdb'); 
$db->insert('name', 'second'); 

난이 OOP를 통해 저널에서 당신을 도움이되기를 바랍니다, 내 나쁜 영어 죄송합니다.

+0

그래,이 작품도. 나는 2 분 전에 그것을 수정했다. 하하. 그러나 어쨌든 도움을 주셔서 감사합니다. 감사합니다. – Irfan