我正在尝试将从Datamanager对象中的PDO收集的值传递给User对象。
我不确定步骤5或6是错误的。
class Datamanager {
public function __construct() {
try {
$this->dbh = new PDO("mysql:host=$this->hostName;dbname=$this->dbName", $this->dbUser, $this->dbPassword);
} catch(PDOException $e) {
echo $e->getMessage();
}
}
public function runQuery($query, $obj){
try {
$STH = $this->dbh->query($query);
$STH->setFetchMode(PDO::FETCH_INTO, $obj);
} catch(PDOException $e) {
echo $e->getMessage();
}
return($obj);
}
class User {
public $user_id;
public $user_name;
public $user_password;
public $session_id;
private $dbc;
public function __construct() {
$this->dbc = new Datamanager();
}
function selectUser ($userID, $obj) {
$query = 'SELECT user_id, user_name, user_password, session_id FROM users';
$results = $this->dbc->runQuery($query, $this);
}
$userID = "1";
$test = new User;
$test->selectUser($userID, $test);
我运行用户的初始设置,然后尝试使用datamanager中检索到的值加载它。我知道PDO本身就是一个对象,但我仍然试图创建一个通用的交互,因为这个代码将被扩展,以允许更多的用户对象访问数据库。
答案 0 :(得分:2)
这是我的版本。
class Datamanager {
public $hostName = 'localhost';
public $dbName = 'stackoverflow';
public $dbUser = 'xxx';
public $dbPassword = 'xxx';
public function __construct() {
try {
$this->dbh = new PDO("mysql:host=$this->hostName;dbname=$this->dbName", $this->dbUser, $this->dbPassword);
} catch (PDOException $e) {
echo $e->getMessage();
}
}
public function runQuery($query, $obj) {
try {
$STH = $this->dbh->prepare($query);
$STH->bindParam(':id', $obj->user_id);
$STH->setFetchMode(PDO::FETCH_INTO, $obj);
$STH->execute();
$STH->fetch();
} catch (PDOException $e) {
echo $e->getMessage();
}
return $obj;
}
}
class User {
public $user_id;
public $user_name;
public $user_password;
public $session_id;
private $dbc;
public function __construct() {
$this->dbc = new Datamanager();
}
function selectUser($userID, $obj) {
$this->user_id = $userID;
$query = 'SELECT user_id, user_name, user_password, session_id FROM users WHERE user_id=:id';
$results = $this->dbc->runQuery($query, $this);
}
}
$userID = "1";
$test = new User;
$test->selectUser($userID, $test);
var_dump($test);
我在您的查询中添加了WHERE user_id=:id
,并将pdo更改为使用prepare()
。
答案 1 :(得分:0)
你错过了几个关闭}。这只是一个复制和粘贴错误吗?
此外,不应该这一行:
$results = $this->dbc->runQuery($query, $this);
改为:
$results = $this->dbc->runQuery($query, $obj);