1

私は以下を使用する関数を持っています:

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

これが何を意味するのか少し混乱していますが、関数で使用しているので、それが間違っているのではないかと思いますか?

編集:

MyConnectスクリプト¬

$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();
4

1 に答える 1

6

はい、関数で使用しているためです。$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);
于 2012-06-02T03:51:51.547 に答える