Php 将mysql连接作为参数传递时出错

Php 将mysql连接作为参数传递时出错,php,mysql,api,Php,Mysql,Api,我正在尝试用PHP和mysql构建一个基本API,根据url路径,使用不同的数据库表,因此需要建立连接。但我一直在犯这样的错误: 致命错误:对非对象调用成员函数prepare() 在……第6行 dashboard.class.php: class dashboard { public function getData($conn) { // Get latest status $stmt = $conn->prepare("SELECT status

我正在尝试用PHP和mysql构建一个基本API,根据url路径,使用不同的数据库表,因此需要建立连接。但我一直在犯这样的错误:

致命错误:对非对象调用成员函数prepare() 在……第6行

dashboard.class.php:

class dashboard {
    public function getData($conn) {
        // Get latest status
        $stmt = $conn->prepare("SELECT status FROM status_archive ORDER BY datetime DESC LIMIT 1 ");
        $stmt->execute(); //line 6
        $stmt->bind_result($status);
        $stmt->fetch();
        ($status == '1' ? $status = 'up' : $status = 'down');
        $stmt->close();
        return $status;
    }
}
创建数据库连接的函数:

function db_connection($type) {
   $db = $type.'_db';
   syslog(LOG_INFO, 'DB: '.$db);
   // Check to see if a development or production server is being used
   if (strpos(getenv('SERVER_SOFTWARE'), 'Development') === false) {
      $conn = mysqli_connect(null,
                              getenv('PRODUCTION_DB_USERNAME'),
                              getenv('PRODUCTION_DB_PASSWORD'),
                              $db,
                              null,
                              getenv('PRODUCTION_CLOUD_SQL_INSTANCE'));
   } else {
      $conn = mysqli_connect(getenv('DEVELOPMENT_DB_HOST'), 
                              getenv('DEVELOPMENT_DB_USERNAME'),
                              getenv('DEVELOPMENT_DB_PASSWORD'),
                              $db);
   }
   // Check if successful connection to database
   if ($conn->connect_error) {
      die("Could not connect to database: $conn->connect_error " .
         "[$conn->connect_errno]");
   }

   return $conn;
}
这是文件末尾启动所有操作的代码:

$path_array = explode("/", parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH));
$conn = db_connection($path_array[3]);
include 'classes/dashboard.class.php';
$dashboard = new dashboard;
$results = $dashboard->getData($conn);
echo json_encode($results, JSON_PRETTY_PRINT);

mysqli\u connect
可以返回falsy值。
您应该使用OOP样式(
newmysqli
)或选中
$conn

$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$conn) {
    die('Connection error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

-请参阅“程序样式”示例。

mysqli\u connect
可以返回falsy值。
您应该使用OOP样式(
newmysqli
)或选中
$conn

$conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');

if (!$conn) {
    die('Connection error (' . mysqli_connect_errno() . ') '
            . mysqli_connect_error());
}

-参见“程序风格”示例。

结果表明,这是由可变范围造成的


最后,我使用PHP$GLOBALS使其工作。

结果表明,这是由于变量作用域造成的


我最终使用PHP$GLOBALS使其工作。

闻起来像是meCheck的可变范围错误。请参考以下链接,并将其应用于您的代码(查询和所有)。您是否尝试过使用
new mysqli
而不是
mysqli\u connect
?var\u dump($conn)。查看$conn实际上是什么。您应该添加代码,确保$conn是PDO/MySQLi/whatever.scope的一个实例,并在meCheck中查找错误。请参考以下链接,并将其应用于您的代码(查询和所有)。您是否尝试过使用
new mysqli
而不是
mysqli\u connect
?var\u dump($conn)。查看$conn实际上是什么。您应该添加代码,确保$conn是PDO/MySQLi/where的实例。