2013-02-23 85 views
0
function connect(){ 
$db = new mysqli(localhost, bludevel_PMI, password1, bludevel_PMIForm); 
if ($db->connect_errno) { 
     echo json_encode(array($mysqli->connect_error)); 
    return false; 
     exit(); 
}} 

function disConnect(){ 
mysqli_close($db); 
} 

function downloadData(){ 
if ($_POST['cmd'] == "downloadData"){ 

$result = $db->query("SELECT * FROM Jobs");//error on this line 
if($result){ 

    while ($row = $result->fetch_array()){ 
    $jobs[$row['PMINumber']] = $row['Address']; 
    } 
    //$result->close(); 
     //$db->next_result(); 
} 


$result = $db->query("SELECT * FROM Installers ORDER BY `Order` ASC"); 
if($result){ 

    while ($row = $result->fetch_array()){ 
    $installers[] = $row['Names']; 
    } 
    //$result->close(); 
     //$db->next_result(); 
} 
echo json_encode(array($jobs, $installers)); 
return true; 

}} 

我得到錯誤PHP Fatal error: Call to a member function query() on a non-object 當我運行這個腳本。 $ db確實是一個對象,我已經在其他 函數中成功使用它,所以問題必須在函數本身內。我是新來的PHP,所以任何 幫助非常感謝。呼叫成員函數在非對象

+0

變量作用域。它在連接函數中定義,但不會傳遞到任何外部變量。 – mario 2013-02-23 23:44:46

+0

[PHP:變量不能在函數內部工作嗎?]可能的重複(http://stackoverflow.com/questions/3041171/php-variable-not-working-inside-of-function) – mario 2013-02-23 23:46:16

+0

「斷開」拼寫爲「斷開連接「,而不是」disConnect「。這不是兩個字。 – meagar 2013-02-23 23:47:49

回答

0

您的$db變量局部於connect函數。你要麼需要使用$db全局實例(不是一個好主意),或者從函數返回的變量,跟蹤它在呼叫範圍:

function connect() { 
    $db = new mysqli(localhost, bludevel_PMI, password1, bludevel_PMIForm); 
    // ... 
    return $db; 
} 


function disconnect($db) { 
    mysqli_close($db); 
} 


$db = connect(...); 

// Later.. 

disconnect($db); 
+0

db變量是全局聲明的,我在其他函數中使用它沒有問題 – user1899201 2013-02-24 00:02:35

0

正如許多已經指出它的作用域問題。

如果你想出於某種原因,堅持用全球$db變量(這絕對不是去最好的方式)比你應該使用global關鍵字在依賴它的所有功能明確的定義範圍爲$db ,像這樣:

function connect(){ 
    global $db; 
    //your code 
} 

function downloadData(){ 
    global $db; 
    //your code 
} 

function disConnect(){ 
    global $db; 
    //your code 
} 

但更好的方法是從connect()返回$ DB和它傳遞給downloadData()disConnect()

function connect(){ 
    $db = new mysqli(...); 
    ... 
    return $db 
} 

function downloadData($db){ 
    ... 
} 

function disConnect($db){ 
    ... 
} 

$db = connect(); 
if (!downloadData($db)) { 
    // 
} 
disConnect($db); 
相關問題