2016-07-30 31 views
0

我在PHP OOP初學者,我想我的代碼玩。所以我想要做的第一件事是寫一個基本的類與連接和插入數據庫的功能。所以我期望的情況是這樣的:OOP mysqli的數據庫功能

-I想上一流的,這將CONTROLL連接並插入函數創建。問題是,我的$ 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中... – 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