PEAR MDB数据库抽象层一次编写—随处运行
时间:2007-12-23 来源:不详 作者:迈克DB
<table>users</table>
<field>user_id</field>
</on>
</sequence>
上一个例子非常的绕弯。一行行看过来,我们看到首先打开一个 sequence 标签,跟着一个指定序列名字的 name 标签。这之后跟着一个定义序列初始值的 start 标签。现在,我们打开一个可选的 on标签。这儿我们需要设置一个表中的指定域。这个信息是治理器用来把序列的值设置为 users 表的 user_id 域的最大值。假如 users 表是空的,作为替代使用的是 start 标签中指定的值。请注重在 start 标签中指定的值是我们调用 mdb::nextid() 返回的第一个值。 当然,你也能使用任何值初始化表。例如你可能想要用你总是想要包含在你的程序中的治理用户来初始化前面的表格。为了这么做,我们需要把一个 initialization 标签添加给 table 标签。listing 4 定义了一在另外一用 insert 标签包括的行之后的行。 listing 4 <table>
<name>users</name>
<initialization>
<insert>
<field> 本文来自织梦
<name>user_id</name>
<value>1</value>
</field>
<field>
<name>handle</name>
<value>default</value>
</field>
<field>
<name>is_active</name>
<value>y</value>
</field>
</insert>
</initialization>
</table>
如你从上个例子中能看到的那样,所有我们需要做的就是给表的每个域设定值。我们现在已经知道了必要的基础知识来创建一个 mdb 的 xml schema。下一步是把这个 schema 文件传递给 mdb 治理器。 $manager = new mdb_manager;
$input_file = 'auth.schema';
// we do not have to connect to a specify a specific database at this time
$dsn = "mysql://$user:$pass@$host"; 内容来自dedecms
$manager->connect($dsn);
$manager->updatedatabase($input_file, $input_file. '.before');
我们现在有了一个新的名字叫 auth 的,它有一个表叫 users。在域 user_id 有一个索引。而且在表中还有一行。我们还有一个序列称为 users_user_id,它将被初始化为 1。因此序列中的下一个值就是 2。最后,schema 的一个拷贝以名字auth.schema.before 被创建。这是因为我们给 mdb_manger::updatedatabase() 传递了可选的第二个参数。在下一节我们将看到为什么要创建这个拷贝。 所有这些都非常令人惊异但是它变得更好。许多情况下程序需要在某些地方作出改变。例如我们可能决定需要把表的名字从 users 变成 people。我们可能还需要增加一个域 pwd 来储存密码域(请检查 textbox 的保留字)。
保留字 我们没有称那个域为 password 的原因是那是 interbase 中一个域名的保留字。因为我们需要 rdbms 独立,mdb 治理器要么给出一个警告要么在 fail_on_invalid_names 选项被设置为真的时候(这是缺省值)失败。 在过去的时候,你可能现在正处于把你所有已经有的东西变成这种新的 schema 的痛苦之中。但是由于 mdb 这些工作能够自动完成。在 listing 5 中是我们对我们的表格定义进行的修改: listing 5 <table>
![](/images/arc_icon.gif)
文章评论
共有位Admini5网友发表了评论 查看完整内容