2011-03-19 29 views
1

我已經寫了一些簡單功能的數據庫處理這樣的:PHP:新手問題 - 開放式數據庫

function dbOpen($db) 
{ 
    $username = "admin"; 
    $password = "pass"; 
    $hostname = "localhost";  
    $db = mysql_connect($hostname, $username, $password) 
} 

function dbClose($db) 
{ 
    mysql_close($db); 
} 

我想要做的就是進入我傳遞給dbOpen功能,如變量:

dbOpen($myDB); 
$result = mysql_query('SELECT * FROM my_tbl',$myDB); 

但是,由於某些原因,此功能不會初始化$myDB。有沒有人有任何想法我做錯了?

+3

或者您可以簡單地返回$ db並將其設置爲'$ mydb = dbOpen()'並刪除$ db參數。你也需要選擇一個數據庫'mysql_select_db' – kjy112 2011-03-19 16:32:14

回答

6

如果你想這樣做,你需要設置你的數據庫函數,將該變量作爲參考傳遞。 This here explains it.

4

function dbOpen($db) { ... }不會影響傳遞給它的$db。如果你想這樣做,你可以嘗試通過引用,如function dbOpen(&$db) { ... }

但是,更好的辦法是返回剛剛打開的手柄。也就是說,不是試圖設置$db,而是設置return $db; - 並在調用它的代碼中,如$myDB = dbOpen();。 (注意,我沒有提到dbOpen的參數 - 你不需要它,因爲它的唯一目的是作爲返回值。)

0

雖然這可能不是你正在尋找的確切答案 - 而且可能會過度 - 我想解釋一下如何使用PHP中的類來完成此操作。你會做這樣的事:

<?php 

class Database { 

    private $db; 

    function __construct() { 
     $username = "admin"; 
     $password = "pass"; 
     $host = "localhost"; 
     $this->db = mysql_connect($hostname, $username, $password); 
    } 

    function close() { 
     mysql_close($this->db); 
    } 

    function query($sql) { 
     return mysql_query($sql, $this->db); 
    } 

} 

?> 

__construct()函數稱爲構造函數,當你做出這個類的一個新實例運行。以下是創建和使用數據庫類的新實例的例子:

<?php 

$d = new Database(); 
echo $d->query('SELECT * FROM my_tbl'); 

?> 

在基本條件,$d後的箭頭(->),這意味着您所訪問的方法query在對象$d(即。你的數據庫對象)。希望這個「面向對象」的PHP對於初學者來說不是太多的信息 - 你可能想要讀this swift introduction以瞭解其基本概念。