ADODB操作

PHPHOT-ADODB 专栏收录该内容
4 篇文章 0 订阅

前段时间花太多时间在数据上面了,后来发现其实我们操作数据库不用那么麻烦,只要用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
指令的LimitTop支援
ADODB
有個$connection->SelectLimit($sql,$nrows,$offset)函數讓你擷取recordset的部分集合,這是採用Microsoft產品中的SELECT TOP用法,及PostgreSQLMySQL中的SELECT...LIMIT用法的優點,即使原來的資料庫並沒有提供此用法,本函數也模擬提供該使用方式。
快取支援
ADODB
允許你在你的檔案系統中暫存recordset的資料,並且在$connection->CacheExecute($secs2cache,$sql) $connection->CacheSelectLimit($secs2cache,$sql,$nrows,$offset)等設定的時間間隔到達之後,才真正去做資料庫的查詢以節省時間。
<?php
// select
指令的limittop支援
$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环境了

php.ini中文解释

20070323 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 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 ; 
若打开,textbyte 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: