使用 PDO 在非对象上调用成员函数 prepare()


Call to a member function prepare() on a non-object with PDO

我有一个函数,它使用:

require_once("connect.php");
function get_username($uid){
  $stmt = $pdo->prepare("SELECT username FROM users WHERE uid= ?");
try {
    $stmt->execute(array($uid));
} catch (PDOException $e) {
    echo $e -> getMessage(); exit;
}
      $row = $stmt->fetch();
      return($row['username']);
}
$id = 1;
echo get_username($id);

但它说:

Call to a member function prepare() on a non-object

我对这意味着我错了什么有点困惑,我想知道这是否是因为我在函数中使用它?

编辑:

我的连接脚本¬

$dsn = 'mysql:dbname=test_db;host=127.0.0.1';
$user = 'test_user';
$password = 'test_pass';
try {
    $pdo = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
    exit;
}
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
error_reporting(E_ALL);
session_start();

是的,这是因为您在函数中使用它。 $pdo在全局范围内,不在函数范围内。

您需要通过在函数中将其作为全局变量引用来访问全局$pdo

function get_username($uid){
  global $pdo;
  $stmt = $pdo->prepare("SELECT username FROM users WHERE uid= ?");

或者在调用函数时传入$pdo

function get_username($uid, $pdo){
...
...
}
get_username( $id, $pdo);