我如何在OO PHP中执行此操作:
SQL代码
CREATE TABLE STUDENTS(
NAME VARCHAR(25) NOT NULL,
COURSE VARCHAR(25) NOT NULL,
YEAR INT NOT NULL,
CONSTRAINT STUDENTS_PK PRIMARY KEY(NAME));
*请不要介意主键,因为我知道使用name作为主键是不准确的。这只是为了简单的目的。
还有......我如何使用OO PHP操作数据库中的数据? 感谢
答案 0 :(得分:5)
答案 1 :(得分:1)
好吧,如果你想切换到在数据库中代表学生的OO方法,那么看起来像下面定义的'Student'类怎么样(虽然这是非常基本的,而不是任何方式的完整ORM )。它需要你到ActiveRecord风格的一半。
请注意,我假设您将使用整数id列,而不是这样会使整个类烦恼。
class Student {
var $id = -1;
var $name;
var $course;
var $year;
public static function newFromID ($id)
{
//fetch a row ($row) from the students table matching the given id
//perhaps returning false if the student doesn't exist?
return self::newFromRow($row);
}
// this method should return a new student object given a specific db row
// and should be called from newFromID. This function means that if the table
// changes, modifications only have to be made in one place
public static function newFromRow($row)
{
$obj = new Student();
//fill in the fields of the object based on the content of the row
return $obj;
}
public static function getAllStudents()
{
//perhaps return an array of student objects, by doing a broad select,
//and passing each row to newFromRow?
}
//this should save the object to the database, either inserting or updating as appropriate
public function save()
{
if($this->id == -1)
{
//insert, store the auto_increment id in $this->id
} else {
//update
}
}
}
因此,要创建一个新学生,并将其保存到数据库:
$student = new Student();
$student->name = "John Smith";
$student->course = "French";
$student->year = 2;
$student->save();
实际上,使用现有的ORM系统通常更为明智,但如果这不是一个选项,您可以考虑编写自己的ORM系统。
答案 2 :(得分:0)
也许您谈论ORM - 对象关系映射模式?有许多不同的方法可以将映射的SQL数据对象传递给PHP类:Propel,Doctrine(两者都可以与Symfony框架一起使用),ActiveRecord。
当然,您可以尝试实现自己的ORM系统。您需要为此ORM编写数据访问层,这些类描述SQL表和许多其他内容。这非常有趣(出于教育目的)。