2013-04-29 184 views
0

我想克里特將包含將在整個網站中使用的各種常規變量和函數的類。其中之一是數據庫連接。我想下面的代碼:通過類的數據庫連接

class Sys { 
    public $dbc = new mysqli('localhost', 'user', 'pass', 'db'); 
    $dbc->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'"); 
} 

$system = new Sys; 

這是給我一個語法錯誤在類的第一行...什麼我做錯了什麼? 謝謝

回答

6

你應該做這樣的事情在構造函數中。您只能在初始聲明中設置基元。創建對象時也需要大括號。

class Sys { 
    private $dbc; 
    private $someInteger = 4; // you can do this 
    private $someArray = array(); // and this. 

    public function __construct() 
    { 
    $this->dbc = new mysqli('localhost', 'user', 'pass', 'db'); 
    $this->dbc->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'"); 
    } 

    public function getDbc() 
    { 
    return $this->dbc; 
    } 

} 

$system = new Sys(); 
//$system->getDbc()->soSomethingWithMyDb(); 

我會建議你使用對象上讀了起來:http://php.net/manual/en/language.types.object.php

1

你應該聲明一個公共$ dbc。

然後有一個構造函數function __construct() { ...... }你初始化它/設置它。

class Sys { 
    public $dbc; 

    function __construct() { 
     $this->dbc = new mysqli('localhost', 'user', 'pass', 'db'); 
     $this->dbc->query("SET NAMES 'utf8' COLLATE 'utf8_unicode_ci'"); 
    } 
} 

$system = new Sys; 
+3

我寧願做$ dbc private和一個getDbc()方法。不要惹我的連接! :-) – 2013-04-29 08:33:08

+0

非常真實:D我也會更新我的答案。快速複製他的代碼。 – nvanesch 2013-04-29 08:36:33

+0

這似乎超出了問題的範圍。 :) – 2013-04-29 08:40:06

-1
class Sys { 
    var $mysqli; 
    function DB($database,$server,$user,$pass) { 
    $this->mysqli = mysqli_connect($server, $user, $pass, $base) or die('Server connection not possible. '. mysqli_connect_error()); 
    } 
} 

include("db.class.mysqli.php"); // db handler class 
// Open the base (construct the object): 
$db = new Sys(DB_NAME, SERVER_NAME, USER_NAME, PASSWORD); 

這是我要做的事

+0

除了我假設你的班級被稱爲數據庫。並使用php4構造函數的語法。很可能忘記更改構造函數名稱。函數也應該被稱爲「系統」,或者甚至更好(如果使用php5)__construct – nvanesch 2013-04-29 08:35:40

+0

正確,因爲我只是複製和粘貼沒有注意:)並且是使用php4作爲其遺留類我從來沒有想過要更新使用__construct仍然有效,雖然沒有大量的理由來更新它:) – Dave 2013-04-29 08:43:36

-1

退房魔法的使用方法http://php.net/manual/en/language.oop5.magic.php在PHP - 上面的方法__construct提到需要爲你的類工作。以下是從彼得·拉文的書對象在第二章面向PHP http://objectorientedphp.com/一個例子9

class MySQLConnect { 

// Data Members 
private $connection; 
private static $instances = 0; 

// Constructor 
public function __construct($hostname, $username, $password) { 
    if(MySQLConnect::$instances == 0) { 
     $this->connection = new mysqli($hostname, $username, $password); 
     // Check for Errors then report them 
     if ($this->connection->connect_error) { 
      die("Connect Error ($this->connection->connect_errno) $this->connection->connect_error"); 
     } 
     // Set the Class variable $instances to 1 
     MySQLConnect::$instances = 1; 
    } else { 
     $msg = "There's another instance the MySQLConnect Class with a connect open already. Close it"; 
     die($msg); 

    } 

} 
} 
-1

你可以用一個精彩類ezSQL

-1

試試這個:

$db = new DB; 
$link = $db->connect()->getLink(); 

class DB { 

    public $connection = array(); 

    public function __construct() { 
     return $this; 
    } 

    public function connect($host=null, $user=null, $pass=null, $database=null) { 
     $this->connection = new Connection($host, $user, $pass, $database); 
     $this->connection->connect(); 
     $this->link = $this->connection->getLink(); 
     if ($this->connection->ping()) { 
      if (!is_null($database)) { 
       if (!$this->connection->databaseConnect($database)) { 
        throw new\Exception('Unable to connect to the server.'); 
       } 
      } 
     }else{ 
      throw new \Exception('Unable to connect to the server.'); 
     } 
     return $this; 
    } 

    public function getLink() { 
     return $this->link; 
    } 

} 

class Connection { 

    protected $chost='localhost'; 
    protected $cuser='guest'; 
    protected $cpass='password'; 
    protected $cdatabase='PROFORDABLE'; 

    function __construct($host=null, $user=null, $pass=null, $database=null) { 

     $host = !is_null($host) ? $host : $this->chost; 
     $user = !is_null($user) ? $user : $this->cuser; 
     $password = !is_null($pass) ? $pass : $this->cpass; 
     $database = !is_null($database) ? $database : $this->cdatabase; 

     $this->set('host', $host)->set('user', $user)->set('password', $password)->set('database', $database); 
     return $this; 
    } 

    public function connect() { 
     $link = mysqli_connect($this->host->getHost(), $this->user->getUser(), $this->password->getPassword()); 
     if (!is_object($link)) { 
      throw new \Exception("An error has occurred while connecting to the server."); 
     } 
     $this->link = $link; 
    } 

    public function databaseConnect($database) { 
     if (!mysqli_select_db($this->getLink(), $database)) { 
      throw new \Exception("Unable to select the database."); 
     } 
    } 

    public function getLink() { 
     return $this->link; 
    } 

    public function ping() { 
     if (mysqli_ping($this->link)) { 
      return TRUE; 
     } 
     return FALSE; 
    } 

    public function set($name, $param) { 
     if (!isset($name) || !isset($param)) return $this; 
     $class = __NAMESPACE__.'\\'.ucwords($name); 
     $this->$name = new $class($param); 
     return $this; 
    } 

    public function get($name) { 
     $getfunc = 'get'.ucwords($name); 
     return $this->$name->$getFunc(); 
    } 

} 

class Host { 
    public function __construct($host) { 
     $this->setHost($host); 
    } 
    public function setHost($host) { 
     $this->host = $host; 
    } 
    public function getHost() { 
     return $this->host; 
    } 
} 

class User { 

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

    public function setUser($user) { 
     $this->user = $user; 
    } 

    public function getUser() { 
     return $this->user; 
    } 

} 

class Password { 

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

    public function setPassword($password) { 
     $this->password = $password; 
    } 

    public function getPassword() { 
     return $this->password; 
    } 

    public function sha($value) { 
     return sha1($value); 

    } 

} 

class guestPassword extends Password { 
    const PASSWORD='password'; 
    public function __construct() { 
     return PASSWORD; 
    } 
} 

class Database { 

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

    public function setDatabase($database) { 
     $this->database = $database; 
    } 

    public function getDatabase() { 
     return $this->database; 
    } 

} 

class Query { 


} 
-1
//Create mysql.php and paste following code 

    <?php 

    class MySQL { 
    private $set_host; 
    private $set_username; 
    private $set_password; 
    private $set_database; 

    public function __Construct($set_host, $set_username, $set_password) { 
     $this->host = $set_host; 
     $this->username = $set_username; 
     $this->password = $set_password; 
    $con = mysql_connect($this->host, $this->username, $this->password); 
    if (!$con) { 
     die("Couldn't connect to the server"); 
    } 
    } 
    //end of __construct 
    //connect to database 
    public function Database($set_database) { 
    $this->database = $set_database; 
    mysql_query("set character_set_server='utf8'"); 
    mysql_query("set names 'utf8'"); 
    mysql_select_db($this->database) or die("Unable to select database"); 
    } 

    //fetch data from any table 
    public function fetch_data($sql) { 
    $this->sql = $sql; 
    $query = mysql_query($this->sql); 
    $result = array(); 
    while ($record = mysql_fetch_array($query)) { 
     $result[] = $record; 
    } 
    return $result; 
    } 

    //fetch all columns from any table to be used for INSERT INTO. 
    public function get_all_columns($table_name) { 
    $this->table_name = $table_name; 
    $sql = "SHOW COLUMNS FROM $this->table_name"; 
    $result = mysql_query($sql); 
    while ($record = mysql_fetch_array($result)) { 
     $fields[] = $record['0']; 
    } 
    $val = ''; 
    foreach ($fields as $value) { 
     $val .= $value . ','; 
    } 
    $vals = rtrim($val, ','); 
     return $vals; 
     } 

    //insert data to any table by $_POST or set of variables separated by , 
    public function insert_data($tbl_name, $tbl_value) { 
    $this->tbl_name = $tbl_name;  
    $this->tbl_value = $tbl_value; 
//use mysql_real_escape_string($tbl_value) to clean & insert data. 
    $this->tbl_col = $this->get_all_columns($this->tbl_name); 
    $sql = "INSERT INTO $this->tbl_name ($this->tbl_col) VALUES ($this->tbl_value)"; 
    $query_result = mysql_query($sql); 
    }  
//end of insert data 

    public function delete_data($del_id, $table_name) { 
    $this->del_id = $del_id; 
    $this->table_name = $table_name; 
    if (isset($this->del_id) && is_numeric($this->del_id) && !empty($this->del_id)) { 
     $sql = "DELETE FROM $this->table_name WHERE id=$this->del_id LIMIT 1"; 
     $del_result = mysql_query($sql); 
     $aff_row = mysql_affected_rows(); 
     return $aff_row; 
    } 
    } 

} 
// class ends here 

//call class to connect to server and db as well. 
$connect = new MySQL('localhost', 'root', ''); 
$connect->Database('db_name'); 
?> 

//include file mysql.php and call your class object as : 

//fetching data from any table use : 
$variable = $connect->fetch_data("SELECT * FROM table_name"); 
for($i=0;$i<count($variable);$i++){ 
$result = $variable[$i]['col_name'];  
} 
//insert INTO values in any table 
$result = $connect->insert_data($tbl_name, $tbl_value); 
if($result) 
echo 'inserted'; 
else{ 
echo 'failed'; 
} 
//delete record from any table 
$result = $connect->delete_data($del_id, $table_name)