有什么办法可以改造这个吗?水管必须放在某个地方:
这是我的index.php页面:
define('BASE_URL', __DIR__);
echo BASE_URL;
require_once(BASE_URL . DIRECTORY_SEPARATOR . "config\\config.php");
require_once(BASE_URL . DIRECTORY_SEPARATOR . "Classes\\PdoAdapter.class.php");
require_once(BASE_URL . DIRECTORY_SEPARATOR . "Classes\\Student.class.php");
$adapter = new PdoAdapter(DB_DSN, DB_USER_NAME, DB_PASSWORD);
$student = new Student($adapter);
$student->findByStudentID(4);以下是我的课程:
require_once(BASE_URL . DIRECTORY_SEPARATOR . "Classes\\IStudent.interface.php");
class Student implements IStudent {
public function __construct(IRepository $adapter) {
$this->adapter = $adapter;
}
public function findByStudentID($id){
$sql = 'SELECT * FROM students WHERE student_id = :student_id';
$this->adapter->connect();
$this->adapter->prepare($sql);
$place_holders = array(':student_id' => $id);
$this->adapter->execute($place_holders);
$results = $this->adapter->fetchAll();
//print_r($results);
foreach ($results as $student){
echo "</br>" . $student["student_id"] . " , " . $student["LAST"] . "</br>";
}
$this->adapter->disconnect();
echo $sql;
}
}如果我添加了一个新方法(相同的类),请说:
require_once(BASE_URL . DIRECTORY_SEPARATOR . "Classes\\IStudent.interface.php");
class Student implements IStudent {
public function __construct(IRepository $adapter) {
$this->adapter = $adapter;
}
public function findByLastName($last_name){
$sql = 'SELECT * FROM students WHERE LAST = :last_name';
$this->adapter->connect();
$this->adapter->prepare($sql);
$place_holders = array(':last_name' => $last_name);
$this->adapter->execute($place_holders);
$results = $this->adapter->fetchAll();
//print_r($results);
foreach ($results as $student){
echo "</br>" . $student["student_id"] . " , " . $student["LAST"] . "</br>";
}
$this->adapter->disconnect();
echo $sql;
}
}我应该像这样一遍又一遍地做连接、准备、执行吗?我可以成为一个地图绘制者,这将创建一个ORM的类型。但我真的不想要ORM。我得找个地方做这个。这个模型似乎给了我很大的灵活性,但这不是把我和PDO联系在一起了吗(这对我来说是可以的)。
这是使用PHP5.4,PDO与MySQL。$adapter是我所拥有的一个PDO类的包装器。
编辑:我在松散地使用概念模型、数据库和表。例如,我不认为模型是一张桌子。这是“M”的一个方面。
编辑:我改变了这个:
public function __construct(IRepository $adapter) {
$this->adapter = $adapter;
$this->adapter->connect();
}然后在我的呼召页上:
$adapter = new PdoAdapter(DB_DSN, DB_USER_NAME, DB_PASSWORD);
$student = new Student($adapter);
$student->findByStudentID(4);
$student->findByStudentLastName('Smith');我觉得这样更好。我还删除了disconnect(),因为我认为PDO在脚本完成后会自动断开连接。
我现在有:
<?PHP
require_once(BASE_URL . DIRECTORY_SEPARATOR . "Classes\\IStudent.interface.php");
class Student implements IStudent {
public function __construct(IRepository $adapter) {
$this->adapter = $adapter;
$this->adapter->connect();
}
public function findByStudentID($id){
$sql = 'SELECT * FROM students WHERE student_id = :student_id';
$this->adapter->prepare($sql);
$place_holders = array(':student_id' => $id);
$this->adapter->execute($place_holders);
$results = $this->adapter->fetchAll();
//print_r($results);
foreach ($results as $student){
echo "</br>" . $student["student_id"] . " , " . $student["LAST"] . "</br>";
}
echo $sql;
}
public function findByStudentLastName($last_name){
$sql = 'SELECT * FROM students WHERE LAST = :last_name';
$this->adapter->prepare($sql);
$place_holders = array(':last_name' => $last_name);
$this->adapter->execute($place_holders);
$results = $this->adapter->fetchAll();
//print_r($results);
foreach ($results as $student){
echo "</br>" . $student["student_id"] . " , " . $student["LAST"] . "</br>";
}
echo $sql;
}
}模型中的回声是用于测试的。
发布于 2014-08-26 18:54:07
您可以避免实现接口,并使用一个基类,其中在构造函数中管理db连接和随后的close。查询将是发送给构造函数的参数。
我认为MVC中的模型是开放的,可以解释管道是如何管理的(就连接而言),它只是一个命名约定,根据框架的不同,从一个表到另一个控制器都很重要。
我在php中做了很多这方面的工作,但我目前手头唯一方便的就是python,尽管如此。
class db_query:
oracle_instance = ''
def __init__(self):
print '-- new db instance --'
def db_Query( self, host, port, sid, login, passwrd, queryString ):
try:
connstr = login + '/' + passwrd + '@' + host + ':' + port + '/' + sid
connection = cx_Oracle.connect( connstr )
except cx_Oracle.DatabaseError as e:
error, = e.args
print(error.code)
print(error.message)
print(error.context)
cursor = connection.cursor()
cursor.arraysize = 200
try:
cursor.execute( queryString )
except cx_Oracle.DatabaseError as e:
error, = e.args
print(error.code)
print(error.message)
print(error.context)
result = []
for rows in cursor:
result.append( rows )
cursor.close()
connection.close()
return result希望这能给你一些想法。
https://stackoverflow.com/questions/25512723
复制相似问题