2013-10-28 47 views
1

我有這個類用於連接mysql,我想在不更改函數名稱的情況下將其替換爲mysqli。

class DB { function DB($db_host, $db_user, $db_port, $db_pass, $db_name) { 

$link = mysql_connect($db_host, $db_user, $db_pass) or die("Can't connect to database"); 
mysql_select_db($db_name, $link); 
}  
public static function execute($sql) { 
    $result = mysql_query($sql) or die("Could not query:$sql"); 
    return $result; 
} 
public static function num_rows($result) 
{ 
    return mysql_num_rows($result); 
} 

public static function fetch($result) 
{ 
    return mysql_fetch_assoc($result); 
} 
} 

$DB = new DB(DB_HOST, DB_USER, DB_PORT, DB_PASS, DB_NAME); 

我試圖改變的東西,但有一個與構造函數$鏈接的問題(不能放到執行功能)。致命錯誤:使用$ this當不在對象上下文中時

class DB { 
function DB($db_host, $db_user, $db_pass, $db_name) { 
$link = mysqli_connect($db_host, $db_user, $db_pass,$db_name) or die(mysqli_connect_error()); 

    return $link;   
}  
public static function execute($sql) { 

      //$link = mysqli_connect('localhost', 'root', '' , 'database'); 

$this->DB(); 

$result = mysqli_query(**$link**,$sql); 

    return $result; 
} 
public static function num_rows($result) 
{ 
    return mysqli_num_rows($result); 
} 

public static function fetch($result) 
{ 
    return mysqli_fetch_assoc($result); 
} 
} 

如何在執行函數中使用構造函數$ link? 有人可以幫助我嗎?先謝謝你。

+2

你不能在靜態函數中使用'$ this'蒸發散。你需要讓'$ link'成爲一個靜態變量。 – Barmar

+0

你是否意識到你的班級非常不安全,並且包含重要的缺陷? –

+0

不,有什麼問題?你可以幫我嗎?我需要帶mysqli連接的類 – Ash

回答

0

這是因爲$this關鍵字在靜態上下文中不可訪問。

像這樣改變你的函數定義。

public static function execute($sql) { 

public function execute($sql) { 
相關問題