2013-02-23 2 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

+0

Возможный дубликат [PHP: переменная не работает внутри функции?] (Http://stackoverflow.com/questions/3041171/php-variable-not-working-inside-of-function) – mario

+0

«Отключить» указано «отключить» ", а не" disConnect ". Это не два слова. – meagar

ответ

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

0

Как многие уже отмечали, это вопрос обзорное ,

Если вы хотите по какой-то причине придерживаться глобальной $db переменной (, который, безусловно, не самый лучший путь), чем вы должны использовать global ключевое слово, чтобы явно определить возможности для $db во всех функций, зависящих от него , как это:

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

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

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

Но лучший способ, чтобы вернуть $ дб от connect() и передать его downloadData() и disConnect()

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

function downloadData($db){ 
    ... 
} 

function disConnect($db){ 
    ... 
} 

$db = connect(); 
if (!downloadData($db)) { 
    // 
} 
disConnect($db);