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 :(得分: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);
答案 1 :(得分:0)
许多人已经指出了一个范围问题。
如果您出于某种原因希望坚持使用全局$db
变量(绝对不是最好的方式),那么应该使用 global < / strong>关键字在所有依赖它的函数中明确定义$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);