2012-11-14 96 views
2

這有什麼不對的連接,並通過調用下面兩個功能,SQL連接和全局變量

<?php 

function dbconnect() 
{ 
    $sql = "localhost"; 
    $username = "------"; 
    $password = "-----"; 
    $connection = mysql_connect($sql, $username, $password) or 
    die("unwable to cct"); 
    $databse = mysql_select_db("-------", $connection); 
    global $connection; 
} 

function close() 
{ 
    global $connection; 
    mysql_close($connection); 
} 

dbconnect(); 
$query = "Some SQL Statement"; 
$data = mysql_query($query, $connection); - L1 
while (mysql_fetch_assoc($data)) 
{ 
    //echo something 
} 
close(); 
?> 

目前的mysql_query中mysql_fetch_array指令的功能關閉到數據庫中,我得到一個錯誤說在L1的$連接需要是一個資源,但是一個BOOL。如果我在那裏給出一個死亡陳述,就會觸發相同的陳述。我不知道什麼是錯的。請發現任何可能的錯誤。我必須從編碼中休假,過了一段時間後我又回來了。

感謝&問候

+1

根本不應該使用'mysql'擴展名。它已被棄用。改用PDO或mysqli。 – ThiefMaster

回答

2

必須使用global關鍵字之前分配$connection變量。否則,您在該函數內聲明本地$connection,然後調用對尚不存在的全局$connection的引用。在其他功能中,使用了不存在的全局。

function dbconnect() 
{ 
    // Global first to be sure the subsequent $connection is the global 
    // rather than a new one local to this function 
    global $connection; 

    $sql = "localhost"; 
    $username = "------"; 
    $password = "-----"; 
    // Now this modifies the global $connection 
    $connection = mysql_connect($sql, $username, $password) or die("unwable to cct"); 
    $databse = mysql_select_db("-------", $connection); 
} 

更多可讀將使用$GLOBALS數組:

function dbconnect() 
{ 
    $sql = "localhost"; 
    $username = "------"; 
    $password = "-----"; 

    // Using the $GLOBALS superglobal array 
    $GLOBALS['connection'] = mysql_connect($sql, $username, $password) or die("unwable to cct"); 
    $databse = mysql_select_db("-------", $GLOBALS['connection']); 
} 

最重要的將是從dbconnect()返回$connection和其它功能使用該值:

function dbconnect() 
{ 
    $sql = "localhost"; 
    $username = "------"; 
    $password = "-----"; 
    $connection = mysql_connect($sql, $username, $password) or 
    die("unwable to cct"); 
    $databse = mysql_select_db("-------", $connection); 

    // Return from the function 
    return $connection; 
} 

// call as 
$connection = dbconnect(); 
// and define your other functions to accept $connection as a parameter 
+0

謝謝邁克爾..聲明$連接作爲全球性在函數的開始並不是問題,在這種情況下,但這裏說的是非常有用的..我現在更好地瞭解全球關鍵字 –

0

不太知道,但嘗試使用

mysql_Close($Connection); 

一切關閉它在其他看起來不錯

1

DECLARE調用mysql_connect()之前的全局$連接()

function dbconnect() 
{ 
    global $connection; 
    $sql = "localhost"; 
    $username = "------"; 
    $password = "-----"; 
    $connection = mysql_connect($sql, $username, $password) or 
    die("unwable to cct"); 
    $databse = mysql_select_db("-------", $connection); 
} 
0

只需將全局$連接;行在功能的開始,而應該工作。在函數的末尾使用全局關鍵字意味着你想要使用全局變量$連接。但是你現在要做的事情是,分配全局變量$ connection「實際的連接資源ID」。