Php 对具有PDO的非对象调用成员函数prepare()
我有一个函数,它使用:Php 对具有PDO的非对象调用成员函数prepare(),php,Php,我有一个函数,它使用: 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;
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 global作为全局变量引用来访问它:
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);
是的,这是因为你在函数中使用它$pdo在全局范围内,不在函数范围内 您需要通过在函数中将$pdo global作为全局变量引用来访问它:
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);
最好的选择是第二种,这是一种非面向对象的依赖注入方法。好的-谢谢你的建议!:当它允许我的时候,我会勾选你的答案!最好的选择是第二种,这是一种非面向对象的依赖注入方法。好的-谢谢你的建议!:当它允许我的时候,我会勾选你的答案!首先创建$pdo的对象,然后使用,非常简单。首先创建$pdo的对象,然后使用,非常简单