与 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仍 有 问 题 , 也 欢 迎 您 多 多 来 信 指 教 。