簡體   English   中英

PHP代碼轉換為PHP / MySQLi OOP

[英]PHP code convert to PHP/MySQLi OOP

今天,我試圖將我的代碼轉換為PHP / MySQLi OOP代碼。

class Database
{
private $host;
private $user;
private $password;
private $db;
private $mysqli;

function __construct()
{
    $this->host = "*****";
    $this->user = "*****";
    $this->password = "******";
    $this->db = "*****";

    $this->mysqli = new mysqli($this->host, $this->user, $this->password, $this->db);

    if (mysqli_connect_errno()):
        printf("Connect failed: %s\n", mysqli_connect_error());
        exit();
    endif;
}
}

這是查詢的腳本:

include_once("WD_Config/database.php");

class Adressen_Db
{
function __construct()
{
    $this->database = new Database();
}

public function selecteer()
{
    $query = "SELECT * FROM wd_adressen WHERE verborgen = 0 ORDER BY naam ASC";
    $result = $this->database->mysqli->query($query);

    return $result;
}
}

這就是我所說的。

$adressen = new Adressen_Db;
$adressen_result = $adressen->selecteer();

echo "<p>";
while ($row = $adressen_result->fetch_assoc()):
echo "<a href='http://maps.google.com/?q=".$row['voladres']."'     target='_blank'>".$row['naam']."</a> woonachtig op <i>".$row['voladres']."</i><br>";
endwhile;
echo "</p>";

我總是得到“在非對象上調用成員函數query()”。 沒關系,我試着...

有人可以告訴我為什么嗎?

謝謝!

類Database中的$mysqli變量聲明為private

您只能通過設置器和獲取器訪問它。

我認為雖然您絕對需要將$mysqli作為公共目錄,以便可以用另一種方法訪問它,但可能還有其他原因,因為錯誤可能是這樣的

試圖訪問數據庫類中的私有屬性

或類似的東西,而您的腳本會引發非對象調用錯誤

我認為您是new Adressen_Db; 缺少括號:

$adressen = new Adressen_Db();

您可以使用以下代碼替換代碼:
config.php文件

<?php

define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASS", "");
define("DB_NAME", "your_database_name");

現在將此文件包含在數據庫文件中

require_once 'config.php';

Class Database {

    public $host = DB_HOST;
    public $user = DB_USER;
    public $pass = DB_PASS;
    public $dbname = DB_NAME;
    public $link;
    public $error;

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

    private function getConnection() {
        $this->link = new mysqli($this->host, $this->user, $this->pass, $this->dbname);
        if (!$this->link) {
            $this->error = "Connection failed" . $this->link->connect_error;
            return false;
        }
    }

    // for only select query
    public function select($query) {
        $result = $this->link->query($query) or
                die($this->link->error . __LINE__);
        if ($result->num_rows > 0) {
            return $result;
        } else {
            return false;
        }
    }

    // for insert, delete and update
    public function myquery($query) {
        $myquery = $this->link->query($query) or
                die($this->link->error . __LINE__);
        if ($myquery) {
            return $myquery;
        } else {
            return false;
        }
    }

}

現在,使您的查詢像這樣:

<?php
require_once './lib/Database.php';
?>

<?php

class Admin {

    private $db;

    public function __construct() {
        $this->db = new Database();
    }

    public function getData(){
        $query = "SELECT * FROM admin";
        $result = $this->db->select($query);
        if($result != false){
            while($row = $result->fetch_assoc()){
                // do your thing
            }
        }
    }

    public function insert(){
        $query = "INSERT INTO admin(admin_name) VALUES('$admin_name')";
        $result = $this->db->myquery($query);
        if($result){
            $msg = "User has been added successfully.";
            return $msg;
        } else {
            $msg = "Error while adding user. Please try again.";
            return $msg;
        }
    }

}

做這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM