之前希望做一些小项目不用mysql数据库的,而使用的bo-blog又更改性不好,很多结构都是在程序里面写好的,然后想到用php写一个简单的兼容mysql部分语句的类。后来想了一下,估计跟我一个想法的人有很多,就开始查了一下相关的网页。

先查到CTB文本论坛,就是用文本数据库的。没有细看代码,但应该没有兼容mysql语句,里面代码很工整,但好像是直接针对文本操作,可能不是我理想中的样子。后来查到txtdb,是数据库的类。国内有一个叫"PHP Text DataBase API ",国外有一个德国网站的吧,叫"PHP Text DB API"。最后就是txtsql,蛮好的。

下面简单介绍一下:

一:txtSQL (2.2 Final  @ 2005-03-26 )
http://txtsql.sourceforge.net/site/index.php
 txtsql的最大优点之一是文档很详细,可惜,我在网上找了半天也找不到中文版的文档,所以只好自己动手,利人利已吧,不过自己的E文水平自己是很清楚的,希望大家看了不会笑掉大牙才好,还希望大家多多指教。

欢迎使用txtSQL 2.2快速安装手册。
这页将指引你如何开始安装txtSQL。

1-解压缩下载包
2-配置类文件
2.1-目录结构
3-包含类文件
3.1-类实例
3.2-连接到txtSQL
3.3- 更改密码
3.4-选择一个数据库
4-执行SQL指令
4.1-指令的列表
4.2-显示结果
5-从断开txtSQL连接
6-差错处理
7-已发布的txtSQL函数

1、解压缩下载包

当你打开.zip文件时,你将注意到有两个文件: txtSQL.class.php和txtSQL.core.php。提取两个文件到相同的目录。新建一个任意名字的新目录; 通常,它名为data。这将是包含数据库的目录。它能可以放在服务器上的任何地方,但是它通常位于以上两个文件的同一目录下。确保这个目录权限是0755或者更高。现在返回到.zip文件找到'txtsql.MYI'提取它到我们刚刚建立的数据库目录。(译者注:其实不用这么麻烦,.zip文件已经组织好了,全部解压到服务器上的任意目录,并设置权限就行了)

2、配置类文件

使用txtSQL的第一步,配置类文件,这样它才能被包含到可能要求它的php文件中。首先,你必须在文本编辑器中打开文件txtSQL.class.php 打开文件时将注意到一个版权声明,其后是一些其它素材。随后有这样一行(缺省是第30行):
30. include_once('./txtSQL.core.php');
这一行代码使它包括txtSQL的的核心函数和类。方便php找到核心文件,你必须编辑单引号内的内容,让它指向txtSQL.core.php文件。(译者注:这个基本上也不用设置,源文件已经配置好了!只有当你的文件不在同一目录时,才需要这么做)

2.1、目录结构

一个有效的数据库目录结构应该是这样的:
+ datafolder (所有数据库的保存目录,比如上面新建的'data' )
+ database_name
+ table.FRM (列定义)
+ table.MYD (行数据)
+ txtsql
+ txtsql.MYI (包含在压缩包)
基本上,一个数据库是主要的数据库目录下的一子目录。
同时在数据库目录内部是txtsql数据库,压缩包中的'txtsql.MYI'I。
在所有的数据库内部,一个数据表由两个文件组成; table.FRM,和table.MYD。.FRM是列定义,另一个是数据行。

3、包含类文件

现在我们已经配置完txtSQL2.2,我们能开始使用它。首先使用文本编辑器创造一个空白的php文件。保存为example.php。
为了简单的说明,假设你把它保存在和'txtSQL.class.php'同样的目录下。
现在我们必须包括php类,在'example.php中输入:
<?php
include('./txtSQL.class.php');
?>

3.1类实例

在面向对象编程( OOP)中,当创建类时,一种特殊变量类型--个对象是自动地创造。
我们需要创造指向txtSQL类的一个对象,那么把这些添加到文件:
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
?>
在单引号中的文字,是包含所有数据库的数据目录的路径。这个目录下必须包含一个txtsql(大小写敏感 )的目录,目录下应该有一个'txtsql.MYI'的文件。这个文件包含操作数据库所有用户与和密码。
这个目录与文件已经在txtSQL压缩包中。一旦路径是正确的,你可以继续向前到下一段。

3.2连接数据库

现在我们可以用正确的用户名和密码来连接数据库了。
默认的用户名是root',默认的密码是空。(强烈建议在下面的步骤中修改)
用下面的代码来连接数据库:
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // 默认时是 $sql->connect('root', '');
?>

txtSQl这时会认可你是它的用户,准许你访问数据库和表。
注意:参考手册中有可用的命令清单。

3.3、更改密码

如果你想更改管理员密码(root),可以用grant_permissions() 函数,grant_permissions() 函数这样调用:
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->grant_permissions($action, $user, $pass [, $newpass]);
?>
参数 $action(动作)可以是 add(添加), drop(删除), or edit(编辑). $newpass(新密码)只有在你编辑(edit)用户时才可用。$user(用户)是用你要操作的用户名, $pass是它的密码。
例如, 如果你想改变用户'root'的密码为 'bar' (假设它还是空的), 我们可以这么做:
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->grant_permissions('edit', 'root', '', 'bar');
?>

或者
新建一个用户 'foo' 密码为'bar'
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->grant_permissions('add', 'foo', 'bar');
?>
或者
删除一个用户'foo' 密码为 'bar'
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->grant_permissions('drop', 'foo', 'bar');
?>
注意:你不用删除用户root',如果没有正确的密码你也不能访问任何数据。

3.4、选择数据库

像mySQL一样, 在操作一个数据表之前,你必须先说明它在哪一个数据库. 这个步骤不是必须的,因为你可以在操作时指定使用哪一个数据库.
我们使用下面的语句来选择一个数据库:
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->selectdb('test'); //选择了数据库 'test'
?>


4、执行指令

通常我们只要使用$sql对象的各种方法下执行指令。
例如:
<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->selectdb('test'); // 选择了数据库 'test'
  $results = $sql->select(array(
'db' => 'test', //这行不是必须的,因为我们已经选定了数据库
'table' => 'test',
'where' => array('id = 10', 'and', 'name =~ John Smith'),
'limit' => array(0, 100)
));
?>


4.1、指令列表

txtSQL2.2支持的指令如下:
4.1- List of commands
showdbs()
createdb()
dropdb()
renamedb()
select()
insert()
update()
delete()
showtables()
createtable()
droptable()
altertable()
describe()
在执行指令之前,你必须连接数据库,不然会产生错误。手册中会用详细的指令说明和实例(随后翻译)。

4.2、显示结果

$results变量现在包含了表test'中选中行的信息。
你可以用一个循环来实现显示$results中的所有结果。
[code]<?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->selectdb('test'); // database 'test' is now selected
 $results=
$sql->execute('select',
array('select' => array('id', 'name'),
'db' => 'test',
'table' => 'test',
'where' => array('id = 10', 'and', 'name =~ John Smith'),
'limit' => array(0, 100))));
 foreach ( $results as $key => $row )
{
print "ID: $row[id], NAME: $row[name]<BR> ";
}
?>[/code]

5-断开txtSQL

用完之后断开数据库是一个好习惯。断开用 disconnect()函数。
[code] <?php
include('./txtSQL.class.php');
$sql = new txtSQL('./data');
$sql->connect($username, $password); // default is $sql->connect('root', '');
$sql->selectdb('test'); // database 'test' is now selected
  $results=
$sql->execute('select',
array('select' => array('id', 'name'),
'db' => 'test',
'table' => 'test',
'where' => array('id = 10', 'and', 'name =~ John Smith'),
'limit' => array(0, 100))));
  foreach ( $results as $key => $row )
{
print "ID: $row[id], NAME: $row[name]<BR> ";
}
  $sql->disconnect();
?>[/code]

6-错误处理

txtSQL 包含错误处理能力。主要用以下的函数:
strict()
get_last_error()
last_error()
errordump()

详细浏览:txtSQL (2.2 Final)
http://txtsql.sourceforge.net/site/index.php


翻译:kuangsir
http://www.sdhao.com/blog/
(1)、back_log:
要求 MySQL 能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log 值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的TCP/IP连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(2)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。 默认数值是28800,我把它改为7200。

(3)、key_buffer_size:
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8M),我的MySQL主机有2GB内存,所以我把它改为 402649088(400MB)。

(4)、max_connections:
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 Too many connections 错误。 默认数值是100,我把它改为1024 。

(5)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128K),我把它改为16773120 (16M)

(6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速ORDER BY或GROUP BY操作。默认数值是2097144(2M),我把它改为 16777208 (16M)。

(7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(9)mysql的搜索功能
用mysql进行搜索,目的是能不分大小写,又能用中文进行搜索
只需起动mysqld时指定 --default-character-set=gb2312


(10)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

注:参数的调整可以通过修改 /etc/my.cnf 文件并重启 MySQL 实现。这是一个比较谨慎的工作,上面的结果也仅仅是我的一些看法,你可以根据你自己主机的硬件情况(特别是内存大小)进一步修改。

4.1版本略做修改 依次搜索就可以 4.1的配置文件是MYSQL目录下的my.ini

数据库存储中的数据类型与大小各异。有些地方只存储数字类型,有些只存储文本类型,有些二者而兼之。而很多数据库支持各种专用类型:日期和时间类型,二进制字符类型以及布尔类型。

选择数据类型与数据相匹配是数据库设计中最为重要的部分,因为这种类型将会影响到RDBMS的效率与性能。所以,对RDBMS的数据类型选择应给予足够的重视。

这就是编写本文的主要目的。表A将列举了MySQL支持的绝大部分重要的数据类型,而MySQL是当前最为流行的免费RDBMS。文中还描述了何时与如何使用这些数据类型。这将有助于建立一个数据库的合理设计。

当初次在机器上安装完Mysql时,你可以匿名进行访问数据库或者以不带口令的root身份进入数据库.另外如果你是一个管理员,你还要进行一些用户的建立及授权,这又涉及到设置密码的问题.下面我们就讨论一下如何设置密码:
首先我们应该知道Mysql数据库中的口令存储必须用password()函数加密它.因为在user表中是以加密形式存储口令,而不是作为纯文本.如果你没有加密,直接在数据库中执行以下语句:
use mysql
insert into user (host,user,password) values('%','user_name','your password');
flush privileges;
相信结果不会让你满意.因为服务器比较的是加密的值,所以服务器连接一定失败.这里需要说明的是flush privileges;这条命令起到了重新加载授权表.你也可以在shell下直接用mysqladmin -u root reload或者mysqladmin -u root flush-privileges来实现重载授权表.
在Mysql环境下,你可以使用以下语句进行设置密码:
1.insert into user(host,user,password) values('%','user_name',password("your password");
2.set password for user_name = password("your password")
以上两种方法都必须进行重载授权表.
3.当然你也可以在创建一个用户时直接设置密码,grant语句将为你自动加密口令.

grant all on *.* to user_name@% identified by "your password";
另外你也可以在shell环境下用mysqladmin程序来设置密码

mysqladmin -u root password "your password"
快点去试一下,没问题吧!
分页: 7/8 第一页 上页 2 3 4 5 6 7 8 下页 最后页 [ 显示模式: 摘要 | 列表 ]

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐