2013-02-23 82 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); 
相关问题