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

正如许多人已经指出的那样,这是一个范围界定问题。

如果您出于某种原因想要坚持使用全局$db变量(这绝对不是最好的方法),那么您应该使用global关键字来显式定义$db所有依赖它的函数的范围,如下所示:

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

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

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

但更好的方法是返回一个 $db fromconnect()并将其传递给downloadData()anddisConnect()

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 回答
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);
于 2013-02-23T23:44:22.507 回答