与 HTML相 结 合 的 资 料 库 --- MiniSQL 2.0 Beta 7 & W3-mSQL 2.0 Beta

看 了 半 年 的 ISDN介 绍 , 您 是 否 对 ISDN有 一 番 了 解 了 呢 ? 是 否 还 有 其 他 的 问 题 ? 本 期 作 者 收 集 了 一 些 读 者 最 常 会 遇 到 的 问 题 , 看 看 里 面 是 否 有 您 需 要 的 解 答 !

本 文 作 者 : 周 树 禾


Mini SQL 简 介 与 功 能 说 明

笔 者 又 来 介 绍 另 一 款 Linux上 的 资 料 库 给 各 位 啦 ! 若 是 读 者 有 印 象 , 笔 者 曾 在 上 上 期 中 介 绍 过 Postgres95给 各 位 , 这 次 笔 者 要 介 绍 的 是 较 适 合 於 一 般 个 人 使 用 的 小 型 资 料 库 软 体 ---Mini SQL 2.0, 笔 者 之 所 以 要 介 绍 这 一 套 软 体 的 主 要 原 因 在 於 , 它 能 够 与 HTML轻 易 地 结 合 在 一 起 , 不 需 要 再 写 CGI程 式 了 。 若 是 读 者 们 用 过 Windows NT的 ASP (Active Server Page), 对 於 这 种 将 程 式 直 接 写 入 Homepage的 方 式 应 该 能 马 上 感 受 到 它 方 便 的 所 在 了 。 其 实 Mini SQL能 够 具 备 这 个 功 能 得 归 功 於 W3-mSQL, 这 是 一 款 与 Mini SQL bundled 在 一 起 的 程 式 , 其 功 能 与 使 用 方 法 待 後 详 述 !

废 话 不 多 说 了 , 开 始 正 式 介 绍 一 下 Mini SQL 吧 ! Mini SQL( 下 文 简 称 mSQL) 是 一 套 小 型 的 资 料 库 软 体 , 它 当 初 设 计 的 主 要 目 标 在 於 能 够 在 资 料 量 不 大 的 情 况 下 很 快 速 地 存 取 资 料 , 这 个 特 性 也 正 好 符 合 一 般 个 人 使 用 者 与 讲 究 反 应 速 度 的 WW-W 环 境 的 要 求 , 而 本 文 所 介 绍 的 2.0版 本 仍 朝 着 更 强 大 的 功 能 改 进 着 。 mSQL不 但 资 料 库 处 理 的 速 度 快 , 还 有 许 多 方 便 的 支 援 特 性 , 使 得 它 不 光 只 是 单 纯 的 资 料 库 系 统 而 已 , 其 中 一 点 就 是 它 有 自 己 的 发 展 语 言 Scripting Language---Lite, 这 是 一 种 非 常 类 似 C语 言 的 Script我 们 可 以 很 轻 松 简 单 地 用 这 种 Script来 发 展 我 们 的 应 用 程 式 。 另 外 还 值 得 一 提 的 是 W3-mSQL中 所 使 用 的 语 言 也 是 Lite喔 ! 以 上 大 略 介 绍 了 一 下 mSQL较 为 特 别 的 几 点 , 可 别 以 为 它 就 只 能 用 她 独 有 的 Lite来 写 程 式 喔 , 除 了 Lite之 外 , mSQL也 有 提 供 C, ESL, Perl 5, Python与 TCL等 API给 各 类 不 同 喜 好 的 程 式 设 计 师 们 应 用 ; 不 过 有 一 点 是 必 须 强 调 的 , mSQL并 非 是 完 全 的 freeware, 若 您 是 在 大 学 中 使 用 此 一 软 体 , 或 是 为 了 学 术 研 究 与 慈 善 等 非 营 利 性 目 的 , 才 能 免 费 得 到 使 用 权 ( free license) , 否 则 您 就 得 付 费 注 册 才 能 得 到 正 式 的 版 权 了 。 也 因 此 我 们 安 装 的 这 套 mSQ-L只 有 30天 的 使 用 期 限 , 若 您 觉 得 它 还 满 好 用 的 , 可 别 忘 了 赶 紧 去 注 册 喔 !

Mini SQL 安 装 与 测 试

笔 者 在 国 内 各 大 ftp site都 没 找 到 最 新 版 本 的 mSQL, 不 得 已 只 好 直 接 到 http://www.hughes.c-om.au去 抓 回 来 最 新 的 2.0 Beta 7.1版 , 之 後 再 以 tar解 开 , 进 入 msql-2.0-B7.1目 录 中 正 式 开 始 我 们 安 装 的 步 骤 :

( 1) 下 make target命 令 会 针 对 作 业 系 统 来 建 立 targets目 录 , 若 正 确 完 成 此 一 动 作 , 将 会 多 出 targets目 录 , 而 且 targets目 录 里 会 有 以 您 作 业 系 统 名 称 及 版 本 为 名 字 之 目 录 , 例 如 笔 者 的 slackware-96即 为 targets/Linux-2.0.0-i486/。

(执 行 画 面 如 图 一 ) (图 一 ) skytree:/tmp/msql-2.0-B7.1# make target

Making target directory for Linux-2.0.0-i486

Building directory tree.

Adding common

Adding conf

Adding lang-common

Adding lite

Adding makedepend

Adding makegen

Adding msql

Adding regexp

Adding tests

Adding tests/rtest.src

Adding tests/rtest-old

Adding w3-msql

Adding w3-msql/tests

Adding sym-links

...........................................................................................................................................................................

Build of target directory for Linux-2.0.0-i486 complete

----------------------------------------------------------------------------

( 2) 进 入 targets/Linux-2.0.0-i486/目 录 中 , 并 且 下 ./setup执 行 编 译 程 式 前 的 设 定 工 作 . 将 会 检 查 系 统 安 装 情 形 来 建 立 编 译 程 式 所 需 要 的 一 些 设 定 档 案 。

(图 二 )

skytree:/tmp/msql-2.0-B7.1/targets/Lin-ux-2.0.0-i486# ./setup

Starting configuration of mSQL 2.

checking for gcc

checking for return type of signal handlers

checking for ranlib

...

... (略 )

...

creating config.status

creating site.mm

creating makegen/makegen.cf

creating common/config.h

checking your directory stuff.Using dirent.h and struct dirent

checking mmap().Your mmap() is fine.

checking for sys_errlist. You’ re fine.

checking for u_int. You’ re fine.

checking for int32_t and friends.You’ re fine.

checking for ssize_t. You’ re fine.

checking for a working getrlimit.You’ re fine.

Ready to build mSQL.

You may wish to check “ common/site.h” although the defaults should be fine.

When you’ re ready, type“ make all” to build the software

----------------------------------------------------------------------------

( 3) 此 时 系 统 内 定 是 安 装 到 /usr/local/Hughes/目 录 中 , 若 您 想 改 变 安 装 後 系 统 的 目 录 可 以 编 辑 site.

mm这 个 档 案 , 将 INST_DIR=/usr/local/Hughes修 改 成 INST_DIR=您 所 想 安 装 到 的 绝 对 路 径 名 称 即 可 。 否 则 可 直 接 做 下 一 步 骤 。

( 4) 下 make all命 令 开 始 编 译 程 式 。

(图 叁 )

skytree:/tmp/msql-2.0-B7.1/targets/Lin-ux-2.0.0-i486# make all

Regenerating Makefile.

.................................................................

Done.

make[1]:Entering directory`/tmp/msql-2.0-B7.1/targets/Linux-2.0.0-i486’

Starting make for mSQL-2

--> [common] directory

make[2]:Entering directory

`/tmp/msql-2.0-B7.1/targets/Linux-2.0.0-i486/common’

...

... (略 )

...

Make of mSQL-2 complete.

You should now install mSQL-2 using make install

make[1]:Leaving directory`/tmp/msql-2.0-B7.1/targets/Linux-2.0.0-i486’

----------------------------------------------------------------------------

( 5) 若 以 上 步 骤 皆 没 问 题 , 先 恭 喜 您 已 经 安 装 了 一 半 啦 ! 再 来 就 是 下 make install来 将 编 译 好 的 程 式 放 置 到 正 确 的 目 录 之 中 了 。 这 一 步 骤 最 好 以 root 来 执 行 才 不 会 出 错 !

( 6) 现 在 我 们 可 以 编 辑 /usr/local/Hughes/msql.c-onf, 这 是 mSQL的 设 定 档 , 其 中 包 含 了 一 些 重 要 的 设 定 资 料 , 说 明 如 下 :

[general]

Inst_Dir = /usr/local/Hughes ( 系 统 安 装 的 绝 对 路 径 )

mSQL_User=msql( mSQL的 使 用 者 帐 号 , 内 定 为 msql)

Admin_User=root( mSQL的 管 理 者 帐 号 , 内 定 为 root, 具 有 建 立 新 资 料 库 , 关 闭 mSQL系 统 的 权 限 等 等 ......)

Pid_File=%I/msql2d.pid( 将 存 放msql 2d启 动 後 的 pid)

...以 下 省 略 ...可 不 用 修 改

(7) 若 您 系 统 中 无 上 步 骤 中 mSQL_User=msql所 设 定 的 使 用 者 帐 号 , 请 以 adduser来 新 增 msql使 用 者 帐 号 , 并 将 系 统 安 装 的 目 录 以 chown-Rmsql/us-r/local/Hughes将 系 统 档 案 所 有 人 更 换 为 msql, 等 一 下 启 动 系 统 时 才 不 会 发 生 错 误 。

( 8) 现 在 你 可 以 下 /usr/local/Hughes/bin/msql2d &启 动 了 ! 启 动 後 ( 画 面 如 图 四 ) , 将 会 以 /usr/loc-al/Hughes/msql.conf为 控 制 档 , 并 以 msql为 此 daemon的 所 有 人 ; 此 外 还 会 警 告 您 未 找 到 ACL( Access Control) 档 案 ( 此 为 一 控 制 资 料 库 存 取 权 限 的 设 定 档 , 待 後 详 述 ) , 将 不 限 制 存 取 权 限 , 即 表 示 任 何 人 皆 可 存 取 您 的 资 料 库 。

(图 四 )

skytree:/usr/local/Hughes#./bin/msql2d&

[1]24568

skytree:/usr/local/Hughes#

Mini SQL Version 2.0 Beta 7

Copyright (c) 1993-94 David J.Hughes

Copyright(c)1995-97 Hughes Technolo-gies Pty Ltd.

All rights reserved.

Loading configuration from‘ /usr/local/Hughes/msql.conf’ .

Server process reconfigured to acc- ept 214 connections.

Server running as user‘ msql’ .

This Beta test release expires in 28 days.

Warning : No ACL file. Using global rea-d/write access.

----------------------------------------------------------------------------

( 9) 再 来 我 们 必 须 以 msql Root_User的 身 分 ( 於 msql.conf中 所 设 定 的 管 理 者 帐 号 )来 执 行 /usr/loc-al/Hughes/misc/setup_www, 安 装 W3-mSQL到 系 统 中 。

( 10) 将 /usr/local/Hughes/bin目 录 中 的 w3-auth与 w3-msql拷 贝 到 您 的 cgi-bin目 录 中 , 之 後 才 能 使 用 W3-mSQL, 使 用 的 方 式 待 後 详 述 。 另 外 W3-mS-QL提 供 了 一 个 程 式 范 例 , 是 关 於 bookmarks资 料 库 的 , 您 可 以 cp-r/usr/local/Hughes/www/bookmarks~/httpd/htdocs把 此 一 范 例 安 装 到 您 的 Web Server上 ! 若 动 作 正 确 , 您 可 以 在 http://your.host/bookmarks/Welcome.html中 看 到 如 图 五 的 画 面 。 以 上 十 个 步 骤 , 已 大 略 将 整 个 资 料 库 系 统 与 W3-mSQL安 装 完 成 了 ! 我 们 可 以 先 来 测 试 一 下 :

1.开 启 WWW浏 览 器 , open URL: http: //your host/bookmarks/Welcomes.html, 若 正 确 者 , 应 看 见 画 面 如 图 五 。

2.点 取 Browse the Bookmarks Database将 看 见 画 面 如 图 六 。

3.点 取 Create, 再 输 入 New Bookmark Title, URL後 , 按 下 Create Bookmark。 如 图 七 。

4.结 果 应 该 如 图 八 , 我 们 已 加 入 了 一 个 新 的 Book-mark到 范 例 资 料 库 中 了 。

5.再 点 选 Back, 将 发 现 我 们 新 加 入 的 Bookmark已 出 现 在 画 面 上 。 至 此 , 测 试 的 工作 已 完 成 了 。 您 可 以 依 照 着 画 面 上 的 指 示 试 试 Delete与 Search的 功 能 喔 !

Mini SQL的 系 统 设 定 copyC:\HE-5\AUTOS-AVE\DDD.TXTC:\38\S-KYTREE\DDD.TXT

这 一 部 份 将 帮 助 读 者 进 一 步 了 解 Mini SQL 这 个 软 体 的 运 作 与 一 些 该 注 意 的 地 方 。 将 分 成 两 个 部 份 来 说 明 :

( 1) Run-Time Configuration

其 实 就 是 在 安 装 步 骤 6) 中 所 提 到 的 msql.co-nf设 定 档 的 内 容 , msql.conf必 须 放 置 於 安 装 系 统 时 的 系 统 目 录 中 , 在 本 篇 文 章 中 即 /usr/local/Hug-hes, 我 们 可 以 使 用 一 般 的 文 书 编 辑 器 直 接 来 修 改 这 个 文 字 档 案 , 并 储 存 即 可 。 在 此 设 定 档 中 , % I

代 表 的 意 义 是 系 统 目 录 ( e.g./usr/local/Hughes) 。 这 个 档 案 里 各 项 设 定 的 意 义 与 功 能 如 下 表 :

( 2) ACL( Access Control)

在 安 装 步 骤 8) 启 动 mSQL Server後 , 如 图

四 可 见 Warning∶ No ACL file.Using global re-ad/write access.

即 是 缺 乏 ACL档 案 , 才 会 产 生 此 警 告 , 先 简 单 说 明 一 下 ACL的 功 能 吧 ! ACL其 实 是 一 个 设 定 mSQL Server存 取 权 限 的 档 案 , 因 为 mSQL并 不 提 供 连 线 时 确 认 使 用 者 身 分 的 功 能 , 所 以 必 须 依 靠 ACL档 案 来 控 制 使 用 者 对 资 料 库 的 动 作 权 限 。

这 个 ACL档 案 必 须 放 置 在 系 统 目 录 中 ( /usr/local/Hughes) , 取 名 为 msql.acl, 原 本 在 此 目 录 中 已 有 一 个 范 例 档 案 -msql.acl.sample, 我 们 可 以 直 接 拷 贝 成 msql.acl并 确 定 其 owner为 msql即 可 。 图 九 为 msql.acl.sample的 内 容 , 我 们 就 针 对 这 内 容 来 讲 解 该 如 何 设 定 好 我 们 的 mSQL资 料 库 权 限 。

(图 九 )

#

# Access control for mSQL

#

# Entries are of the form

#

database=test

read=bambi,-root

write=root

host=*

access=local,remote

option=rfc931

database=minerva

read=*

write=minerva

access=local

----------------------------------------------------------------------------

test与 minerva为 所 要 设 定 权 限 的 资 料 库 名 称 , bambi可 读 取 test, root则 不 可 读 取 test资 料 库 , 但 是 却 可 写 入 test资 料 库 , host=*则 是 表 示 所 有 网 路 上 的 主 机 皆 可 与 此 资 料 库 连 线 , 若 写 成 ho-st=*.yzit.edu.tw则 代 表 於 yzit.edu.tw domain下 的 主 机 才 能 够 与 此 资 料 库 连 线 。 access=local表 示 只 有 local端 程 式 才 能 够 存 取 此 资 料 库 。 若 想 使 已 启 动 的 系 统 更 新 为 ACL设 定 值 , 可 以 使 用 /usr/local/H-ughes/bin/msqladmin reload即 可 更 新 系 统 状 态 为 新 的 设 定 值 。

Lite:MiniSQL的 Scripting Lang-uage

Mini SQL拥 有 自 己 的 一 种 Script语 言 , 称 做 Lite, 可 用 来 做 为 与 其 资 料 库 沟 通 的 工 具 , 等 会 儿 要 介 绍 的 W3-mSQL也 是 使 用 Lite喔 ! 若 是 读 者 学 过 C语 言 的 话 , 笔 者 先 在 这 里 恭 喜 您 罗 ! 因 为 Lite 的 语 法 与 C语 言 只 有 几 点 不 同 , 其 馀 几 乎 都 是 相 同 的 , 除 此 之 外 Lite也 有 与 Perl相 同 之 处 , 即 变 数 不 用 宣 告 , 即 可 以 直 接 在 程 式 之 中 使 用 喔 ! 底 下 笔 者 先 说 明 一 下 Lite与 C不 同 之 处 :

1.记 忆 体 的 管 理 不 需 要 程 式 本 身 来 操 心 , 由 Lite Virtual Machine来 自 行 控 制 。

2.变 数 并 无 固 定 的 型 态 。

3.有 动 态 的 阵 列 型 态 , 简 单 的 说 就 是 阵 列 中 的 每 个 元 素 都 可 以 是 不 同 的 型 态 。

4.变 数 不 需 事 先 宣 告 即 可 直 接 使 用 。

5.变 数 的 名 称 必 须 以 $ 为 开 头 字 元 , 且 $ 後 的 第 一 个 字 元 不 可 为 大 写 的 字 元 。 例 如 : $skytree, $ y-zit为 合 法 变 数 名 称 , 而 skytree, $ Yzit则 不 合 法 。

Lite的 变 数 型 态 , 有 以 下 叁 种 :

1.char(字 元 ,字 串 型 态 ) ex:$ skytree_1=“ skytree” ;

2.integer(整 数 型 态 ) ex:$ skytree_2= 100; 3.real number(实 数 型 态 ) ex:$ skytree_4= 12.627;

变 数 型 态 可 以 直 接 做 转 换 , 例 如 :

$ skytree_2=100;

$ skytree_1=(char)$ skytree_2;

则 $ skytree_1就 等 於 “ 100” , 此 外 , 字 串 也 可 以 直 接 做 相 加 的 动 作 , 例 如 :

$ skytree_1=“ YZIT” + “ _CNPA” ;

则 $ skytree_1就 等 於 “ YZIT_CNPA” 。

Lite的 运 算 元 (operator):

包 含 了 + , - , * , / 与 一 个 非 常 特 殊 的 # , + , m, * , / 这 四 个 数 学 运 算 元 中 , 除 了 + 多 具 备 了 字 串 串 接 的 功 能 外 , 其 馀 皆 与 一 般 数 学 运 算 元 无 异 。 而 # 为 Lite本 身 较 为 特 殊 的 一 个 运 算 元 , 它 的 功 能 是 能 够 求 得 某 个 变 数 内 容 的 大 小 , 若 其 後 变 数 型 态 为 字 串 , 则 传 回 字 元 的 总 数 ; 若 为 阵 列 , 则 传 回 阵 列 中 的 元 素 总 数 , 举 例 来 说 :

$ skytree=“ skytree” ;

$ cnpa=# $ skytree;

$ array[0]=0;

$ array[1]=1;

$ array[2]=2;

$ num=# $ array;

则 $ cnpa就 等 於 7, 因 为 skytree共 有 7个 字 元 ; 而 $ num就 等 於 3, 因 为 $ array阵 列 中 共 有 3个 元 素 。

在 C语 言 中 , 若 是 一 行 之 内 可 以 直 接 写 完 的 叙 述 , 可 以 不 用 { } 括 起 来 , 但 是 在 Lite中 则 不 行 , 不 管 叙 述 为 多 少 行 都 得 以 { } 括 起 来 , 例 如 :

if( a> b) printf( “ a> b” ) ;

在 C语 言 中 是 允 许 的 , 但 是 若 以 Lite来 写 , 则 一 定 得 写 成

if( $ a> $ b)

printf( “ a> b” ) ;

另 外 , Lite只 支 援 while这 一 种 回 圈 ( 也 包 含 了 break与 continue) , 这 一 点 是 用 惯 了 for的 人 需 要 注 意 的 。 还 有 一 点 与 C不 同 的 是 , Lite中 的 字 串 变 数 可 以 直 接 以 ==来 比 较 , 不 像 C得 呼 叫 strcmp( ) 等 函 数 才 能 比 较 两 个 字 串 。 Lite的 函 数 定 义 : Lite 与 C的 自 定 函 数 方 式 几 乎 完 全 一 样 , 但 是 有 两 点 要 注 意 的 是 , Lite仅 能 够 传 值 , 而 不 能 够 传 址 ; 另 外 在 传 回 值 时 , 可 自 由 传 回 任 意 型 态 的 变 数 , 与 C只 能 传 回 固 定 型 态 的 变 数 是 不 同 的 。 以 下 是 Lite定 义 函 数 的 固 定 格 式 :

funct函 数 名 称 ( 变 数 型 态 变 数 名 称 ,变 数 型 态 变 数 名 称 , ......)

叙 述 ;

下 面 是 两 个 正 确 定 义 函 数 的 例 子 :

funct addition( int$ value1, int$ value2)

$ result=$ value1+$ value2;

return( $ value) ;

funct merge( array $values, int$numV- als)

{ $ count=0;

$ result=“ ” ;

while( $ count< $ numValues)

$ result=$ result+ $values[$count ];

$ count=$ count+ 1;

return( $ result );

Lite的 标 准 模 组 :

Lite的 标 准 模 组 就 如 同 C的 标 准 函 数 库 一 样 , 可 以 在 任 何 的 Lite程 式 中 被 呼 叫 而 使 用 , 由 於 支 援 的 函 数 太 多 , 无 法 在 此 列 举 , 读 者 可 参 阅 /usr/local/Hughes/doc/manual/mod_std.htm的 完 整 说 明 。

Lite Mini模 组 :

这 是 提 供 与 Mini SQL Database沟 通 的 函 式 库 , 是 我 们 常 常 要 使 用 到 的 函 数 , 所 以 在 此 说 明 各 个 函 数 的 语 法 功 能 :

语 法 : int msqlConnect( char* host)

功 能 : 将 与 host的 mSQL Server连 线 , 若 不 设 定 host, 则 表 示 将 与 local端 mSQL Server连 线 。

范 例 :

$ sock=msqlConnect( “ research.Hughescom.au” ) ; if( $ sock< 0)

echo( “ ERROR : $ ERRMSG\n” ) ;

语 法 : msqlConnect( int sock)

功 能 : 将 关 闭 此 socket的 连 线 。

范 例 :

msqlClose( $sock) ;

语 法 : int msqlSelectDB( int sock, char* db )

功 能 : 告 知 已 连 线 的 mSQL Server将 使 用 那 一 个 资 料 库 。

范 例 :

if ( msqlSelectDB( $ sock, “ my_db” ) < 0)

echo( “ ERROR∶ $ ERRMSG\n” ) ;

语 法 : int msqlQuery( int sock, char* query) 功 能 : 送 出 SQL命 令 给 mSQL Server。

范 例 :

if( msqlQuery( $ sock, “ select* fro- m foo” ) < 0)

echo( “ ERROR∶ $ ERRMSG\n” ) ;

语 法 : msqlStoreResult( )

功 能 : 传 回 之 前 msqlQuery所 查 询 的 结 果 。

范 例 :

$ res=msqlStoreResult( ) ;

语 法 : msqlFreeResult( int res)

功 能 : 释 放 上 一 范 例 中 $ res所 占 用 的 记 忆 体 。

范 例 :

msqlFreeResult( $ res) ;

语 法 : msqlFetchRow( int res)

功 能 : 传 回 所 得 到 的 结 果 中 的 每 一 行 资 料 。

范 例 :

$ row=msqlFetchRow( $ res) ;

if ( # $ row==0)

echo( “ ERROR∶ $ ERRMSG\n” ) ;

else

echo( “ Field 0 is $ row[0]\n” ) ;

语 法 : msqlDataSeek( int res, int location) 功 能 : 可 以 移 动 $ res中 的 data pointer, 若 location为 0将 使 得 data pointer重 新 指 向 第 一 笔 资 料 结 果 , 若 此 时 再 下 msqlFetchRow()将 会 传 回 第 一 行 资 料 。

范 例 :

msqlDataSeek( $ res, 0) ;

语 法 : msqlListDBs( int sock)

功 能 : 传 回 此 sock连 线 之 mSQL Server上 所 有 可 用 的 资 料 库 名 称 。

范 例 :

$ dbs=msqlListDBs( $sock) ;

$ index=0;

while( $ index< # $ dbs)

printf( “ Database=%s\n” , $ dbs[$ index]) ;

$ index=$ index+ 1;

语 法 : msqlListTables( int sock, char* db) 功 能 : 传 回 此 database上 所 有 table的 名 称 。

范 例 :

$ tabls=msqlListTables( $ sock, “ my

_db” ) ;

$ index=0;

while( $ index< # $ tabls)

printf( “ Table=%s\n” , $ tabls[$ index]

) ;

$ index=$ index+ 1;

语 法 : msqlInitFieldList( int sock, char* db, char* table)

功 能 : 产 生 一 个 result handle, 它 包 含 了 此 table 中 所 有 栏 位 的 一 些 细 节 资 料 , 这 个 result handle将 是 下 一 个 函 数 将 会 用 到 的 必 要 资 料 。

语 法 : msqlListField( int res)

功 能 : 传 回 res( 为 result handle) 中 的 栏 位 属 性 资 料 , 传 回 的 值 为 一 个 阵 列 。

阵 列 元 素 存 放 资 料 的 叙 述 栏 位 名 称

1 栏 位 型 态

2 栏 位 长 度

3 栏 位 旗 标

范 例 :

$ res=msqlInitFieldList( $ sock, “ myb”

, “ my_table” ) ;

$ field=msqlListField( $ res) ;

while( # $ res> 0)

echo( “ Name $ field[0]\n” ) ;

$ field=msqlListField( $res) ;

语 法 : msqlFieldSeek( int res, int location)

功 能 : 将 会 移 动 $ res( 为 result handle) 中 的 pointer, 指 向 所 指 定 的 location。

语 法 : int msqlNumRows( int res)

功 能 : 传 回 $ res( 为 result handle) 的 rows总 数 。

范 例 :

msqlQuery( $ sock, “ select* from foo” )

$ res=msqlStoreResult( ) ;

printf( “ There are%d rows in foo\n” , msq-lNumRows( $res) ;

语 法 : msqlEncode( char* string)

功 能 : 可 将 string中 可 能 导 致 错 误 的 字 元 跳 过 , 传 回 不 含 错 误 字 元 的 字 串 。

范 例 :

$ name=“ O'Reilly” ;

$ newName=msqlEncode( $name) ;

以 上 大 略 简 介 一 下 Lite, 希 望 读 者 能 够 对 它 能 够 有 个 初 步 的 了 解 , 才 能 够 对 於 我 们 接 下 来 要 介 绍 的 W3-mSQL不 会 太 迷 惑 , 其 实 笔 者 在 此 只 是 简 介 了 Lite的 语 言 部 分 而 已 , 实 际 上 它 还 有 其 他 很 棒 的 功 能 ! 诸 如 编 译 , 函 式 库 等 功 能 都 一 应 俱 全 , 搭 配 mSQL发 展 应 用 程 式 既 简 单 又 快 速 喔 !

W3-mSQL 2.0 Beta 实 本 身 就 是 一 个 CGI程 式 , 只 是 这 个 CGI程 式 具 有 解 析 Lite语 言 的 能 力 , 能 够 依 照 Lite语 言 的 程 式 叙 述 来 做 事 , 并 且 制 作 出 最 後 完 全 的 HTML输 出 。 那 究 竟 我 们 该 如 何 才 能 使 用 它 呢 ? 其 实 很 简 单 , 现 在 先 制 作 的 第 一 个 加 入 了 Lite叙 述 的 Homepage吧 ! 我 们 替 这 个 HTM-L档 案 取 名 成 Hello.htm, 并 存 放 在 /usr/local /Hughes/www/目 录 中 , 以 下 为 这 个 档 案 的 内 容 :

< HTML>

< HEAD>

< TITLE> Hello World from W3mSQL< /TITLE>

< /HEAD>

< BODY>

< CENTER>

< H1> Introduction to W3mSQL</H1>

< P>

< ! echo( “ Hello World\n” ) ; >

< /CENTER>

< /BODY>

< /HTML>

其 中 只 有 echo( “ Hello World\n” ) ; 为 Lite叙 述 , 而 我 们 Homepage中 的 Lite叙 述 都 必 须 以 < ! 与 > 括 起 来 , 才 会 被 W3-mSQL当 成 是 Lite 程 式 叙 述 来 执 行 , 否 则 只 会 当 成 是 一 般 HTML输 出 , 而 不 会 当 成 程 式 来 执 行 。 读 者 可 以 试 试 用 浏 览 器 来 开 启 http: //your.host/cgi-bin/w3-msql/Hello.htm即 可 看 到 结 果 如 图 十 , 现 在 我 们 就 来 一 步 步 讲 解 w3-msql是 如 何 运 作 的 , 首 先 它 接 收 到 /Hell-o.htm的 参 数 後 , 会 先 去 找 寻 Homepage Root( 一 般 为 htdocs) 目 录 下 是 否 有 Hello.htm这 个 档 案 , 若 无 此 档 案 则 至 /usr/local/Hughes/www目 录 下 寻 找 Hello.htm, 找 到 後 , 一 步 步 解 析 其 档 案 内 容 , 非 Lite叙 述 则 直 接 输 出 , 遇 到 < ! 才 开 始 执 行 Lite叙 述 , 遇 到 > 才 结 束 执 行 Lite叙 述 。 聪 明 的 读 者 可 能 会 问 , 为 什 麽 要 搜 寻 这 两 个 目 录 呢 ? 因 为 若 是 我 们 不 想 将 原 始 程 式 码 那 麽 轻 易 给 人 家 知 道 , 就 可 以 把 写 好 的 Homepage放 置 在 /usr/local/Hughes/w-ww中 , 若 是 放 在 Homepage Root中 , 别 人 很 容 易 就 可 以 拿 到 我 们 辛 辛 苦 苦 写 的 程 式 罗 !

在 一 般 CGI程 式 中 , 最 重 要 的 莫 过 於 Form的 参 数 传 递 了 , 那 麽 W3-mSQL可 以 传 递 Form的 资 料 吗 ? 答 案 是 肯 定 的 , 而 且 非 常 简 单 , 举 例 来 说 , 若 有 一 个 Form如 下 :

< FORM ACTION=/cgi-bin/w3-msql/my_stu-ff/test.html METHOD=POST>

< INPUT NAME=username SIZE=20>

< INPUT NAME=password SIZE=20 TYPE=PASSWORD>

< SELECT NAME=user_type>

< OPTION VALUE=“ casual” > Casual User

< OPTION VALUE=“ staff” > Staff Account

< OPTION VALUE=“ guest” > Temporary

Guest Account

< /SELECT>

则 在 test.html中 , 我 们 可 以 直 接 使 用 $ usern-ame, $ password, $ user_type来 代 表 所 传 进 来 的 参 数 , 比 起 CGI程 式 可 要 方 便 多 啦 ! 讲 到 这 里 , 可 能 有 许 多 读 者 们 早 已 经 忍 不 住 想 要 试 试 了 吧 ! 先 别 急 , 让 笔 者 再 注 明 一 次 , 之 前 笔 者 介 绍 的 Lite标 准 模 组 与 Lite Mini模 组 都 可 以 直 接 应 用 在 我 们 的 Homepage中 , 详 细 的 范 例 可 以 参 考 /usr/local/H-ughes/www/bookmarks/* .htm, 这 是 Mini SQL 的 bookmark资 料 库 范 例 , 读 者 们 可 以 仔 细 研 究 後 再 加 以 应 用 喔 !

MiniSQL的 一 些 管 理 工 具 程 式 (S-tandard Pr-ograms and Utilitie-s) 这 些 工 具 程 式 都 位 於 /usr/local/Hughes/bin目 录 中 , 以 下 就 一 一 介 绍 其 功 能 :

程 式 名 称 : msql

功 能 : 可 与 mSQL Server连 线 , 直 接 存 取 资 料 库 。

程 式 名 称 : relshow

功 能 : 可 得 知 mSQL Server资 料 库 的 架 构 。

程 式 名 称 : msqladmin

功 能 : 此 程 式 可 管 理 资 料 库 , 做 新 增 、 删 除 资 料 库 等 动 作 , 还 可 以 关 闭 mSQL Server。 功 能 依 照 Command不 同 来 决 定 。

Command选 项 :

create db_name 新 增 一 个 名 叫 db_name的 资 料 库 。

drop db_name 删 除 名 叫 db_name的 资 料 库 。

shutdown 关 闭 mSQL Server。

reload 重 新 读 取 ACL设 定 档 案 , 采 用 新 的 设 定 值 。

version 显 示 系 统 版 本 与 相 关 资 讯 。

stats 显 示 系 统 的 统 计 资 料 。

程 式 名 称 : msqldump

功 能 : 可 产 生 一 个 包 含 了 SQL命 令 的 ASCII档 案 , 这 个 档 案 可 以 重 建 资 料 库 架 构 。

程 式 名 称 : msqlexport

功 能 : 将 资 料 库 某 table中 的 所 有 资 料 一 笔 笔 显 示 出 来 。

程 式 名 称 : msqlimport

功 能 : 可 从 一 个 文 字 档 中 的 资 料 一 笔 笔 转 换 到 资 料 库 中 。

结 语

笔 者 这 次 介 绍 mSQL Server是 站 在 对 资 料 库 已 有 初 步 了 解 的 使 用 者 角 度 来 说 明 , 对 於 一 般 刚 入 门 的 读 者 看 起 来 则 会 吃 力 许 多 , 顾 此 失 彼 , 还 望 见 谅 ! 若 您 对 mSQL仍 有 问 题 , 也 欢 迎 您 多 多 来 信 指 教 。