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を初めて使用するので、どんな助けでも大歓迎です。

4

2 に答える 2

0

変数$dbconnect関数に対してローカルです。のグローバル インスタンスを使用するか$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);
于 2013-02-23T23:44:22.507 に答える
0

多くの人がすでに指摘しているように、スコープの問題です。

何らかの理由でグローバル$db変数に固執したい場合 (これは間違いなく最善の方法ではありません)、 globalキーワードを使用$dbして、それに依存するすべての関数でスコープを明示的に定義する必要があります。次のようにします。

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

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

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

しかし、より良い方法は $db from を返し、それをandconnect()に渡すことですdownloadData()disConnect()

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

function downloadData($db){
    ...
}

function disConnect($db){
    ...
}

$db = connect();
if (!downloadData($db)) {
    //
}
disConnect($db);
于 2013-02-24T00:47:10.683 に答える