前段时间花太多时间在数据上面了,后来发现其实我们操作数据库不用那么麻烦,只要用ODBC或者ADODB就可以了,因为我选择用ADODB所以收集了些ADODB操作的文档,共享出来
在调用ADOdb类库文件之后,就可以初始化ADOdb类库,进行数据库链接了。有两种方式连接数据库,以mysql数据库为例
a.传统方式
如下:
//建立联机对象
$conn = &ADONewConnection('mysql');
$mch="localhost";
$user="root";
$pwd="pwd";
$database="test";
$conn->Connect($mch, $user, $pwd, $database);
或
$conn->PConnect($mch, $user, $pwd, $database);
b.DSN方式
ADOdb 4.51以后,引入了DSN(Data Source Name)初始化方式,即将数据库连接语句按指定格式写在一个字符串内,以此为参数来初始化连接。
如下:
$dsn = 'mysql://root:pwd@localhost/test';
$db = NewADOConnection($dsn);或
//数据库永久连接
$dsn2 = 'mysql://root:pwd@localhost/test?persist';
5.基本概念
ADOdb使用中有两个基本对象
ADOConnection 和 ADORecordSet
前者是数据库的连接对象,处理与数据库连接相关的事务
后者是记录集对象,指向当前查询结果的记录集,其实它就是由ADOConnection执行查询语句返回的数据集类
6.基本方式
Connect, PConnect, NConnect
Execute, CacheExecute
SelectLimit, CacheSelectLimit
MoveNext, Close
qstr, Affected_Rows, Insert_ID
以上是ADOdb最常用的方法,也是ADOdb类核心层方法,效率很高,使用他们时不要犹豫。
还有些常用的方法,如
$ADORecordSet->fields['FieldName']
$ADORecordSet->FetchRow()
$ADOConnection->GetOne($sql);//取返回记录集第一行的第一个字段
$ADOConnection->GetAll($sql);//返回两维数组,第一维是记录索引,第二维是记录的字段数组
常用操作
1. 连接数据库:
<?php
include("adodb/adodb.inc.php"); # adodb的最基本的文件必须包含进去
$DB = NewADOConnection('mysql://root:1qaz2wsx@localhost/test');# 这里mysql表示连接mysql数据库,如果改成oracle就是连接oracle了,root是连接数据库用户,mysql_password是密码,localhost是主机地址,test表示数据库
$DB->debug=true;# 打开调试开关
if (!$DB) die("Connection failed");# 判断是否连接成功
?>
2. 读出表纪录
<?php
$sql = " select * from user ";
$rs = $DB->Execute($sql); // 执行sql语句
//$cnt = 0;
while ($arr = $rs->fetchRow()) // 这里的FetchRow()相当于:mysql_fetch_array()
{
echo $arr[id].":". $arr["user"] ."<br>";
//print_r($arr); print "<br>";
}
?>
3. 读出单条纪录:
<?php
$row = $DB->GetRow("select * from user where id=21 "); // 使用GetRow()
echo $row[id] .":". $row[user]."<br>";
?>
4. 读出纪录所在纪录位置:
<?php
$val = $DB->GetOne("select * from user where id =22 ");
echo $val."<br>"; // 这里val = 22,表示第22条纪录的位置;
?>
5. GetAll()
<?php
$arr = $DB->GetAll("select * from user where id =23 ");
foreach ($arr as $key => $values)
//echo $key .":". $values ."<br>";
echo $values[id] .":". $values[user] ."<br>";
}
?>
6. GetAssoc()
<?php
$arr = $DB->GetAssoc("select * from user");
//print_r($arr);
echo "<br>";
foreach ($arr as $i => $m)
{
echo $m[id] .":". $m[user] ."<br>";
}
?>
7. 使用缓存:
<?php
$rs = $DB->CacheExecute(60, "select * from user where id=22 ");
while ($row = $rs->FetchRow())
{
echo $row["id"] .":". $row["user"]."<br>";
}
?>
8.
<?php
$re = $DB->Execute("select * from user");
if (!$re->EOF)
{
for ($i=0, $max = $re->FieldCount(); $i < $max; $i++)
{
print $re->fields[$i].' ';
$re->MoveNext();
}
}
?>
9.
<?php
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $DB->Execute("select * from user");
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $DB->Execute("select * from user");
print_r($rs1->fields);
foreach ($rs1->fields as $key => $value);
{
echo "<br>". $key .":". $value ."<br>";
}
echo "<br>";
print_r($rs2->fields);
echo "<br>". $rs2->fields['user'];
?>
Output:
Array ( [0] => 33 [1] => N [2] => 1122475990 )
2:1122475990
Array ( [id] => 33 [flag_deleted] => N [user] => 1122475990 )
1122475990
10. 统计sql的纪录数:
<?php
// 统计sql的纪录数
$re = $DB->Execute("select * from user");
$record = $re->RecordCount();
echo $record;
?>
11. 获取插入后的那个id:
<?php
// 读出最后的插入的编号;
$sql = " insert into user (user) values ('". time() ."') ";
$re = $DB->Execute($sql);
echo $DB->Insert_ID() ."<br>";
?>
12. 传回被update或者insert以及delete的列数;
<?php
$re = $DB->Execute("update user set flag_deleted='Y' where id< 30 ");
echo $DB->Affected_Rows();// 传回被update或者insert以及delete的列数;
?>
13. Select指令的Limit及Top支援
ADODB有個$connection->SelectLimit($sql,$nrows,$offset)函數讓你擷取recordset的部分集合,這是採用Microsoft產品中的SELECT TOP用法,及PostgreSQL與MySQL中的SELECT...LIMIT用法的優點,即使原來的資料庫並沒有提供此用法,本函數也模擬提供該使用方式。
快取支援
ADODB允許你在你的檔案系統中暫存recordset的資料,並且在$connection->CacheExecute($secs2cache,$sql)及 $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設定的時間間隔到達之後,才真正去做資料庫的查詢以節省時間。
<?php
// select指令的limit及top支援
$sql = " select * from user order by id asc ";
$re = $DB->SelectLimit($sql, 2,1);
while ($row = $re->FetchRow())
{
echo $row['id'] .":". $row['user'] ."<br>";
}
echo "<hr>";
?>
呵呵,对于英语不好的人学PHP看那些英语太难受了,而且难看得懂,哈,在网上收集了些东西,然后修改了些,这个是PHP配置文件得中文版,参照下就可以很快得配置PHP环境了
2007年03月23日 by 鎻╈愛
;upload_tmp_dir = ; 存放用HTTP协议上载的文件的临时目录(在没指定时使用系统默认的)
upload_max_filesize = 2097152 ; 文件上载默认地限制为2 Meg
extension_dir = c:/php/ ; 存放可加载的扩充库(模块)的目录
enable_dl = On ; 是否使dl()有效.
; 在多线程的服务器上 dl()函数*不能*很好地工作,
; 例如IIS or Zeus,并在其上默认为禁止
;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;
file_uploads = On ; 是否允许HTTP方式文件上载
;upload_tmp_dir = ; 用于HTTP上载的文件的临时目录(未指定则使用系统默认)
upload_max_filesize = 2M ; 上载文件的最大许可大小
; Fopen wrappers ;
;;;;;;;;;;;;;;;;;;
allow_url_fopen = On ; 是否允许把URLs当作http:.. 或把文件当作ftp:…
;;;;;;;;;;;;;;;;;;;;;;
; 动态扩展 ;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
; 若你希望一个扩展库自动加载,用下面的语法:
; extension=modulename.extension
; 例如,在windows上,
; extension=msql.dll
; or 在UNIX下,
; extension=msql.so
; 注意,这只应当是模块的名字,不需要目录信息放在里面.
; 用上面的 extension_dir 指示指定扩展库的位置.
;Windows 扩展
;extension=php_nsmail.dll
extension=php_calendar.dll
;extension=php_dbase.dll
;extension=php_filepro.dll
extension=php_gd.dll
;extension=php_dbm.dll
;extension=php_mssql.dll
;extension=php_zlib.dll
;extension=php_filepro.dll
;extension=php_imap4r2.dll
;extension=php_ldap.dll
;extension=php_crypt.dll
;extension=php_msql2.dll
;extension=php_odbc.dll
; 注意, MySQL的支持现在是内建的,因此,不需要用它的dll
;;;;;;;;;;;;;;;;;;;
; 模块设定 ;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;
[Syslog]
define_syslog_variables = Off ; 是否定义各种的系统日志变量
; 如:$LOG_PID, $LOG_CRON, 等等.
; 关掉它是个提高效率的好主意.
; 运行时,你可以调用函数define_syslog_variables(),来定义这些变量
[mail function]
SMTP = localhost ;仅用于win32系统
sendmail_from = me@localhost.com ;仅用于win32系统
;sendmail_path = ;仅用于unix, 也可支持参数(默认的是’sendmail -t -i’)
[Debugger]
debugger.host = localhost
debugger.port = 7869
debugger.enabled = False
[Logging]
; 这些配置指示用于示例的日志记录机制.
; 看 examples/README.logging 以得到更多的解释
;logging.method = db
;logging.directory = /path/to/log/directory
[Java]
;java.class.path = ./php_java.jar
;java.home = c:/jdk
;java.library = c:/jdk/jre/bin/hotspot/jvm.dll
;java.library.path = ./
[SQL]
sql.safe_mode = Off
[ODBC]
;uodbc.default_db = Not yet implemented
;uodbc.default_user = Not yet implemented
;uodbc.default_pw = Not yet implemented
uodbc.allow_persistent = On ; 允许或禁止 持久连接
uodbc.check_persistent = On ; 在重用前检查连接是否还可用
uodbc.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
uodbc.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
uodbc.defaultlrl = 4096 ; 控制 LONG 类型的字段.返回变量的字节数,0 代表通过(?)0 means passthru
uodbc.defaultbinmode = 1 ; 控制 二进制数据.0 代表?????Handling of binary data. 0 means passthru, 1 return as is, 2 convert to char
; 见有关 odbc_binmode 和 odbc_longreadlen 的文档以得到 uodbc.defaultlrl 和 uodbc.defaultbinmode 的解释.
[MySQL]
mysql.allow_persistent = On ; 允许或禁止 持久连接
mysql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
mysql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
mysql.default_port = ; mysql_connect() 使用的默认端口,如不设置,mysql_connect()
; 将使用变量 $MYSQL_TCP_PORT,或在/etc/services 下的mysql-tcp 条目(unix),
; 或在编译是定义的 MYSQL_PORT(按这样的顺序)
; Win32环境,将仅检查MYSQL_PORT.
mysql.default_socket = ; 用于本地 MySql 连接的默认的套接字名.为空,使用 MYSQL 内建值
mysql.default_host = ; mysql_connect() 默认使用的主机(安全模式下无效)
mysql.default_user = ; mysql_connect() 默认使用的用户名(安全模式下无效)
mysql.default_password = ; mysql_connect() 默认使用的密码(安全模式下无效)
; 注意,在这个文件下保存密码通常是一个*坏*主意
; *任何*可以使用PHP访问的用户可以运行
; ’echo cfg_get_var(”mysql.default_password”)’来显示那个密码!
; 而且当然地,任何有读该文件权力的用户也能看到那个密码.
[mSQL]
msql.allow_persistent = On ; 允许或禁止 持久连接
msql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
msql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
[PostgresSQL]
pgsql.allow_persistent = On ; 允许或禁止 持久连接
pgsql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
pgsql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
[Sybase]
sybase.allow_persistent = On ; 允许或禁止 持久连接
sybase.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
sybase.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
;sybase.interface_file = ”/usr/sybase/interfaces”
sybase.min_error_severity = 10 ; 显示的错误的最低严重性
sybase.min_message_severity = 10 ; 显示的消息的最低重要性
sybase.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式.若打开,这将导致 PHP 自动地
; 把根据结果的 Sybase 类型赋予它们,
; 而不是把它们全当成字符串.
; 这个兼容模式不会永远留着,
; 因此,将你的代码进行需要的修改,
; 并将该项关闭.
[Sybase-CT]
sybct.allow_persistent = On ; 允许或禁止 持久连接
sybct.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
sybct.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
sybct.min_server_severity = 10 ; 显示的错误的最低严重性
sybct.min_client_severity = 10 ; 显示的消息的最低重要性
[bcmath]
bcmath.scale = 0 ; 用于所有bcmath函数的10十进制数数字的个数number of decimal digits for all bcmath functions
[browscap]
;browscap = extra/browscap.ini
browscap = C:/WIN/SYSTEM/inetsrv/browscap.ini
[Informix]
ifx.default_host = ; ifx_connect() 默认使用的主机(安全模式下无效)
ifx.default_user = ; ifx_connect() 默认使用的用户名(安全模式下无效)
ifx.default_password = ; ifx_connect() 默认使用的密码(安全模式下无效)
ifx.allow_persistent = On ; 允许或禁止 持久连接
ifx.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
ifx.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
ifx.textasvarchar = 0 ; 若打开,select 状态符返回一个 ‘text blob’字段的内容,而不是它的id
ifx.byteasvarchar = 0 ; 若打开,select 状态符返回一个 ‘byte blob’字段的内容,而不是它的id
ifx.charasvarchar = 0 ; 追踪从固定长度的字符列里剥离的空格.
; 可能对 Informix SE 用户有效.
ifx.blobinfile = 0 ; 若打开,text和byte blobs 的内容被导出到一个文件
; 而不是保存到内存.
ifx.nullformat = 0 ; NULL(空)被作为空字段返回,除非,这里被设为1.
; 这种情况下(为1),NULL作为字串NULL返回.
[Session]
session.save_handler = files ; 用于保存/取回数据的控制方式
session.save_path = C:/win/temp ; 在 save_handler 设为文件时传给控制器的参数,
; 这是数据文件将保存的路径.
session.use_cookies = 1 ; 是否使用cookies
session.name = PHPSESSID
; 用在cookie里的session的名字
session.auto_start = 0 ; 在请求启动时初始化session
session.cookie_lifetime = 0 ; 为按秒记的cookie的保存时间,
; 或为0时,直到浏览器被重启
session.cookie_path = / ; cookie的有效路径
session.cookie_domain = ; cookie的有效域
session.serialize_handler = php ; 用于连接数据的控制器
; php是 PHP 的标准控制器.
session.gc_probability = 1 ; 按百分比的’garbage collection(碎片整理)’进程
; 在每次 session 初始化的时候开始的可能性.
session.gc_maxlifetime = 1440 ; 在这里数字所指的秒数后,保存的数据将被视为
; ’碎片(garbage)’并由gc 进程清理掉.
session.referer_check = ; 检查 HTTP引用以使额外包含于URLs中的ids无效
session.entropy_length = 0 ; 从文件中读取多少字节
session.entropy_file = ; 指定这里建立 session id
; session.entropy_length = 16
; session.entropy_file = /dev/urandom
session.cache_limiter = nocache ; 设为{nocache,private,public},以决定 HTTP 的
; 缓存问题
session.cache_expire = 180 ; 文档在 n 分钟后过时
session.use_trans_sid = 1 ; 使用过渡性的 sid 支持,若编译时许可了
; –enable-trans-sid
url_rewriter.tags = ”a=href,area=href,frame=src,input=src,form=fakeentry”
[MSSQL]
;extension=php_mssql.dll
mssql.allow_persistent = On ; 允许或禁止 持久连接
mssql.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
mssql.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
mssql.min_error_severity = 10 ; 显示的错误的最低严重性
mssql.min_message_severity = 10 ; 显示的消息的最低重要性
mssql.compatability_mode = Off ; 与旧版的PHP 3.0 兼容的模式.
[Assertion]
; ?????
;assert.active = On ; ?assert(expr); active by default
;assert.warning = On ; issue a PHP warning for each failed assertion.
;assert.bail = Off ; don’t bail out by default.
;assert.callback = 0 ; user-function to be called if an assertion fails.
;assert.quiet_eval = 0 ; eval the expression with current error_reporting(). set to true if you want error_reporting(0) around the eval().
[Ingres II]
ii.allow_persistent = On ; 允许或禁止 持久连接
ii.max_persistent = -1 ; 持久连接的最大数.-1 代表无限制
ii.max_links = -1 ; 连接的最大数目(持久和非持久).-1 代表无限制
ii.default_database = ; 默认 database (format : [node_id::]dbname[/srv_class]
ii.default_user = ; 默认 user
ii.default_password = ; 默认 password
[Verisign Payflow Pro]
pfpro.defaulthost = ”test.signio.com” ; 默认的 Signio 服务器
pfpro.defaultport = 443 ; 连接的默认端口
pfpro.defaulttimeout = 30 ; 按秒计的默认超时时间
; pfpro.proxyaddress = ; 默认的代理的 IP 地址(如果需要)
; pfpro.proxyport = ; 默认的代理的端口
; pfpro.proxylogon = ; 默认的代理的登录(logon 用户名)
; pfpro.proxypassword = ; 默认的代理的密码
[Sockets]
sockets.use_system_read = On ; 使用系统的read() 函数替代 php_read()封装
; Local Variables: (局部变量)
; tab-width: 4
; End: