PHP中ADODB类详解


Posted in PHP onMarch 25, 2008

 虽然 PHP 是建构 Web 系统强有力的工具,但是 PHP 存取数据库的功能,一直未能标准化,每一种数据库,都使用另一种不同且不兼容的应用程序接口(API)。为了填补这个缺憾,因此才有 ADODB 的出现。一旦存取数据库的接口予以标准化,就能隐藏各种数据库的差异,若欲转换至其它不同的数据库,将变得十分容易。 

目前 ADODB 支持的数据库种类非常地多,例如:MySQL, PostgreSQL, Interbase, Informix, Oracle, MS SQL 7, Foxpro, Access, ADO, Sybase, DB2 以及一般的 ODBC (其中 PostgreSQL、Informix、Sybase 的driver 是由自由软件社群发展之后贡献出来的)。 

使用 ADODB 最大的优点之一是:不管后端数据库如何,存取数据库的方式都是一致的,开发设计人员不必为了某一套数据库,而必须再学习另一套不同的存取方法,这大大减轻开发人员的知识负担,过去的知识往后仍可继续使用,转移数据库平台时,程序代码也不必做太大的更动。 

其实 ADODB 这样的发展理念,并不是首创的,DBI 比 ADODB 出现得更早,它提供 Perl 存取数据库时,使用一致的 API 呼叫接口。相信用过 Perl + DBI 的朋友,再来用 ADODB 时,会有一种似曾相识的感觉。 

另外,ADODB 对用过 ASP 的人而言,应该不陌生,这类朋友对 ADODB 应该很容易接受。 

我们来看一下,ADODB 的简单用法: 

<?php 

// 引入 adodb 的 inc 档,才能呼叫 adodb 提供的函式 

include('adodb/adodb.inc.php'); 

// 选择连接的数据库种类,以建立联机对象, 

// 一旦对象建立,即可使用其成员函式来处理数据库。 

// 以下 $conn 即此一物件(object) 

$conn = &ADONewConnection('mysql'); 

// 要不要显示侦错讯息,false 不要,true 要。 

// $conn->debug = false; 

$conn->debug = true; 

// 连接数据库 

// 用法:$conn->Connect('主机', '使用者', '密码', '数据库'); 

// 用例: 

$conn->Connect('localhost', 'piza', 'ooo123', 'test'); 

// 若欲采用持续性连接,上式可换用 PConnect: 

// $conn->PConnect('localhost', 'piza', 'ooo123', 'test'); 

// 设定 sql 命令 

$sql = "insert into t values ('abcde', 18)"; 

// 执行 sql 命令 

$rs = $conn->Execute($sql); 

// 检查执行结果,若 $rs == false,则呼叫 $conn 对象的成员函式 ErrorMsg() 

if (!$rs) print $conn->ErrorMsg(); else print "OK!"; 

?> 

结果如下: 

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

(mysql): insert into t values ("abcde",18) 

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

OK! 

若把侦错关掉,即 $conn->debug=false,则结果如下: 

OK! 

以下,逐步为各位介绍:使用 ADODB 的重点方法。 

2. 安装 
ADODB 的首页在:http://php.weblogs.com/ADOdb,目前(2002/10/24)最新版是:2.42 版,可至 ADODB 下载或至台南县教网中心 FTP 下载。 

安装 ADODB 的方法超极简单,只要下载、解压、放入适当位置,即可完成 ! 如下所示: 

1. 下载: 

$ ncftp ftp.tnc.edu.tw 

cd sysop/ADODB 

get adodb242.tgz 

2. 解压: 

假设我把 adodb242.tgz 放入 /var/www/html 中 

$ cp adodb242.tgz /var/www/html 

$ tar xvzf adodb242.tgz 

如下所示: 

adodb/adodb-cryptsession.php 

adodb/adodb-csvlib.inc.php 

adodb/adodb-errorhandler.inc.php 

adodb/adodb-errorpear.inc.php 

adodb/adodb-lib.inc.php 

adodb/adodb-pager.inc.php 

....以下省略.... 

现在,您在 /var/www/html/adodb 已安装好 ADODB 了。 

3. 引入 ADODB 
一旦安装好 ADODB,使用前,应把 ADODB 相关的含入文件引入您的程序中。adodb 目录放在任何位置无所谓,只要能指向正确路径文件名即可。一般而言,您的程序代码只须引入 adodb.inc.php。 

作法如下: 

在您的 PHP 程序中: 

include('路径/adodb/adodb.inc.php'); 

或 

include_once('路径/adodb/adodb.inc.php'); 

例: 

若您的程序和 adodb 在同一目录下: 

.. 

adodb/ 

something.php* 

则: 

include('adodb/adodb.inc.php'); 

即可。 

若位置是在某一个目录 somedir 中: 

.. 

adodb 

somedir/something.php 

则必须使用: 

include('../adodb/adodb.inc.php'); 

除了 adodb.inc.php 这个含入档,ADODB 还提供许多 adodb-*.inc.php 的含入档,这些多半是为驱动某些数据库的特殊用法而设的。 

若是引入 adodb-session.php 则可让您将 session 存入数据库中来维护运用。 

若是引入 adodb-pager.inc.php,可方便您做分页显示。 

若是引入 adodb-errorhandler.inc.php,可让您自订错误处理讯息。 

若是含入 adodb-pear.inc.php,可让您使用 PHP4 的 PEAR DB 语法来使用 ADODB。此时,尚可使用 DSN 连接数据库的字符串设定。如 $dsn="mysql://piza:ooo123@localhost/test"; 

若是引入 tohtml.inc.php,可帮您在程序代码中,方便将取出的记录,转成 HTML 的表格(table)来显示。 

若是引入 toexport.inc.php,可让您方便地输出 CSV 档或以 tab 分隔字段的数据文件。 

若是引入 rsfilter.inc.php,可让您在使用记录之前,预做过滤处理。 

若是引入 pivottable.inc.php,可让您使用 pivot table 功能(俗称 cross-tabulations)。 

注意 ! adodb.inc.php 是一定要引入的,其它,则视您要使用那一个功能,再引入该含入档即可。 

4. 选用数据库种类,建立联机对象 
由于 ADODB 使用对象导向的作法,因此您在引入档之后,接着请视您后端数据库的种类,建立一个联机对象。作法如下: 

以 MySQL 数据库为例: 

$conn = &ADONewConnection('mysql'); 

注:NewADOConnection 和 ADONewConnection 是一样的,二者皆可使用。 

上例中的 'mysql' 是指数据库的 drvier 的种类,ADODB 会据此呼叫对应的数据库 driver。 

其它常用的 driver 有:access、ado、ado_access、ado_mssql、db2、vfp、ibase、borland_ibase、informix、imformix72、mssql、oci8、odbc、postgres、postgres64、postgres7、sqlanywhere、sybase....等等。 

我们称建立的对象 $conn 为一 ADOConnection 对象,它代表与数据库的连接事务,皆透过这个对象来处理。ADOConnection 对象会提供许多处理的方法,以对象导向的说法,这些方法称为成员函式,这是外界存取此一对象的接口。 

一旦联机对象建立之后,就有许多对象函式可供您使唤啦 ! 请看下一节的介绍。 

5. 侦错模式 
程序开发的过程,为了方便查出出现问题可能的地方,通常我们会打开侦错模式,俟程序功能确实稳定之后,再将它关闭。ADODB 提供侦错模式,存取数据库时,能显示其运作方式。 

打开侦错模式,使用法: 

$conn->debug=true 

关闭侦错模式,使用法: 

$conn->debug=false 

6. 连接数据库 
接着,使用 $conn 联机对象的 Connect 或 PConnect 函式来连接特定的数据库,此时必须提供 DSN (Data Source Names)相关数据,DSN 可能包括:主机名称、数据库使用者、数据库密码、数据库名称。不同的数据库种类,DSN 可能可以省略其中若干项。以 MySQL 而言,则上述四者都要提供。 

该函式会传回 true 或 false,用以表示是否连接成功。 

用例: 

// 格式:$conn->Connect('主机', '使用者', '密码', '数据库'); 

$conn->Connect('localhost', 'piza', 'ooo123', 'test'); 

或者,采持续性连接: 

// 格式:$conn->PConnect('主机', '使用者', '密码', '数据库'); 

$conn->PConnect('localhost', 'piza', 'ooo123', 'test'); 

若欲探查是否有联机成功,可用一个变量来接取传回值: 

$mch="localhost"; 

$user="piza"; 

$pwd="ooo123"; 

$database="test"; 

$cok = $conn->Connect($mch, $user, $pwd, $database); 

或者,采持续性连接: 

$cok = $conn->PConnect($mch, $user, $pwd, $database); 

if (!$cok) { echo "无法连接数据库 $database"; exit; } 

7. 设定 sql 命令语法、执行 sql 命令 
接下来,您就可以设计您要执行的 sql 命令语法,然后付诸执行。 

$sql = "这里放 SQL 的命令语法"; 

$rs = $conn->Execute($sql); 

其中,$rs 为回传的结果,若 $rs == false,则表示执行失败,您必须仔细检查一下。 

您不一定要把命令语法放在 $sql 变量中,也可以直接放入 Execute( ) 括号中。若命令较短无妨,若命令较长,我建议您还是用一个变量 $sql 来设定命令字符串吧 ! 

下一节开始,为各位介绍 SQL 的基本命令,如:Insert、Select、Update、Delete 等等的用法。 

8. 插入记录(Insert) 
Insert 的用法如下: 

// $name 为字符串,$year 为数字 

$name='abcde'; 

$year=18; 

// 插入一笔记录,命令的大小写无妨,但数据表 t 及变量则大小写有分别 ! 

$sql = "INSERT INTO t VALUES ('$name', $year)"; 

// $sql = "insert into t values ('$name', $year)"; 亦可。 

// 执行 

$rs = $conn->Execute($sql); 

// 检查执行结果,进行错误处理;若正常,则继续其它动作.... 

if (!$rs) print $conn->ErrorMsg(); 

....以下省略.... 

ErrorMsg() 是错误显示的函式,它会取出错误讯息,并显示出来。 

另外,ADODB 提供一种 记录集(RecordSet) 函式 GetInsertSQL(),可帮您产生 Insert 的语法。 

例子如下: 

<?php 

// 引入 ADODB 

include('adodb/adodb.inc.php'); 

// 建立联机对象 

$conn = &ADONewConnection('mysql'); 

// 侦错 

$conn->debug=true; 

// DSN 四项基本数据设定 

$mch="localhost"; 

$user="root"; 

$pwd="jack168"; 

$database="test"; 

// 连接至数据库 test 

$conn->PConnect($mch, $user, $pwd, $database); 

// 产生一笔空记录 

$sql = "select * from t where year=-1"; 

$rs = $conn->Execute($sql); 

// 用一个空数组来装要更新的数据 

$r = array(); 

$r['name']='john'; 

$r['year']=28; 

// 用 GetInsertSQL 函式来制作一个完整的 sql 命令,此 sql 命令放在 $insertSQL 中 

$insertSQL = $conn->GetInsertSQL($rs, $r); 

// 执行插入 

$conn->Execute($insertSQL); 

$conn->Close(); 

?> 

侦错讯息如下: 

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

(mysql): select * from t where year=-1 

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

(mysql): INSERT INTO t ( name, year ) VALUES ( 'john', 28 ) 

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

9. 取出记录(Select) 
Select 的用法如下: 

<?php 

// 引入 ADODB 

include('adodb/adodb.inc.php'); 

// 建立联机对象 

$conn = &ADONewConnection('mysql'); 

// 不侦错 

$conn->debug=false; 

// DSN 四项基本数据设定 

$mch="localhost"; 

$user="piza"; 

$pwd="ooo123"; 

$database="test"; 

// 连接至数据库 test 

$conn->PConnect($mch, $user, $pwd, $database); 

// 执行 Select 由表格 t 取出数据, 

// 它会传回一个 ADORecordSet 记录集对象 $rs (RecordSet) 

// 实际上 $rs 是一个 cursor 指标,它拥有目前的记录(row 或称 record), 

// 该记录的所有字段数据的内容,存放在 fields 这个数组之中 

// ,以数字为索引,第一个由 0 开始 

$rs = &$conn->Execute('select * from t'); 

// 若 $rs 为 false,则秀出错误讯息 

if (!$rs) { 

print $conn->ErrorMsg(); 

} else { 

// 当尚未到达 记录集 $rs 的结束位置(EOF:End Of File)时,(即:还有记录尚未取出时) 

while (!$rs->EOF) { 

// 秀出所有字段,$FieldCount() 会传回字段总数 

for ($i=0, $max=$rs->FieldCount(); $i < $max; $i++) { 

print $rs->fields[$i] . " "; 

// 移至下一笔记录 

$rs->MoveNext(); 

// 换列 

echo "<br>\n"; 

$rs->Close(); // 可不用 

$conn->Close(); // 可不用 

?> 

$rs->fields[] 数组是由 PHP 的数据库扩展功能产生的,某些扩展功能并不支持使用字段名称当作索引。 

若欲使用名称当作索引,也就是俗称的 hash 或 associative arrays,则需使用全域变量 $ADODB_FETCH_MODE 加以指定。 

以下设定:使用数字索引 $ADODB_FETCH_MODE= ADODB_FETCH_NUM; 

以下设定:使用名称索引 $ADODB_FETCH_MODE= ADODB_FETCH_ASSOC; 

下面是使用名称索引的例子: 

<?php 

// 引入 ADODB 

include('adodb/adodb.inc.php'); 

// 建立联机对象 

$conn = &ADONewConnection('mysql'); 

// 不侦错 

$conn->debug=false; 

// DSN 四项基本数据设定 

$mch="localhost"; 

$user="root"; 

$pwd="jack168"; 

$database="test"; 

// 连接至数据库 test 

$conn->PConnect($mch, $user, $pwd, $database); 

// 执行 sql 之前,指定使用名称索引 

$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC; 

// 执行 Select,它会传回一个 ADORecordSet 记录集对象 $rs 

// 实际上 $rs 是一个 cursor 指标,它拥有目前的记录内容, 

// 该记录存放在 fields 这个数组之中 

$rs = &$conn->Execute('select * from t'); 

// 若 $rs 为 false,则秀出错误讯息 

if (!$rs) { 

print $conn->ErrorMsg(); 

} else { 

// 当尚未到达记录集结束位置(EOF)时, 

while (!$rs->EOF) { 

// 秀出所有字段 

print $rs->fields['name'] . " " . $rs->fields['year']; 

// 移至下一笔记录 

$rs->MoveNext(); 

// 换列 

echo "<br>\n"; 

$rs->Close(); // 可不用 

$conn->Close(); // 可不用 

?> 

10. 取出记录(使用 FetchRow) 
这里示范 FetchRow 的用法: 

$sql = "select * from t"; 

$rs = $conn->Execute($sql); 

if ($rs) { 

while( $ar = $rs->FetchRow() ) { 

print $ar['name'] ." " . $ar['year']; 

print "<br>\n"; 

FetchRow() 会将取出的记录传回,您可用一个 array 来接取。 

注意 ! 使用 FetchRow() 就不必再用 MoveNext(),FetchRow 内部会自动完成移至下一笔记录的动作。 

11. 更新记录(Update) 
您可以用传统的方式: 

$sql ="UPDATE t SET name='john', year=28 WHERE year=18"; 

$conn->Execute($sql); 

也可以用以下这种方式: 

<?php 

// 引入 ADODB 

include('adodb/adodb.inc.php'); 

// 建立联机对象 

$conn = &ADONewConnection('mysql'); 

// 侦错 

$conn->debug=true; 

// DSN 四项基本数据设定 

$mch="localhost"; 

$user="piza"; 

$pwd="ooo123"; 

$database="test"; 

// 连接至数据库 test 

$conn->PConnect($mch, $user, $pwd, $database); 

// 选择要更新的那一笔记录 

$sql = "select * from t where year=18"; 

$rs = $conn->Execute($sql); 

// 用一个空数组来装要更新的数据 

$r = array(); 

$r['name']='john'; 

$r['year']=28; 

// 用 GetUpdateSQL 函式来制作一个完整的 sql 命令,此 sql 命令放在 $updateSQL 中 

$updateSQL = $conn->GetUpdateSQL($rs, $r); 

// 执行更新 

$conn->Execute($updateSQL); 

$conn->Close(); 

?> 

侦错讯息如下: 

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

(mysql): select * from t where year=18 

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

(mysql): UPDATE t SET name = 'john', year = 28 WHERE year=18 

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

12. 删除记录(Delete) 
删除记录很简单,采传统方式即可: $sql = "DELETE FROM t WHERE year=18"; 

$rs = $conn->Execute($sql); 

13. 使用字段对象(Field Objects) 
这里示范字段对象 FetchField 的用法,用以取得字段名称及字段型态: 

$sql = "select * from t"; 

$rs = &$conn->Execute($sql); 

if ($rs) { 

while (!$rs->EOF) { 

// 取出第二个字段 

$f = $rs->FetchField(1); 

// 印出字段名称 及 字段型态 

print $f->name . ":" . $f->type; 

$rs->MoveNext(); 

print "<br>\n"; 

另外,ADODB 提供一个 RecordSet 函式 MetaType(),可将原始的字段型态转成一般型态代码: 

C : 字符 

X : text 

B : blob 

D : 日期 

T : timestamp 

L : 布尔值或位 

I : 整数 

N : 数字型态,包括:自动增加、数值、浮点数、实数及整数 

R : serial、自动增加 

用例: 

$f = $rs->FetchField(1); 

// 印出字段名称 及 字段型态的代码 

print $f->name . ":" . $rs->MetaType($f->type); 

14. 简单分页(Pager) 
ADODB 提供一种简单分页显示记录的方法,使用前,要将 adodb-pager.inc.php 引入。 

<?php 

include('adodb/adodb.inc.php'); 

// 引入分页功能 

include('adodb/adodb-pager.inc.php'); 

// 启动 session 

session_start(); 

$db = ADONewConnection('mysql'); 

$mch="localhost"; 

$user="piza"; 

$pwd="ooo123"; 

$database="test"; 

$db->Connect($mch, $user, $pwd, $database); 

$sql = "select * from t"; 

// 产生 pager 对象 

$pager = new ADODB_Pager($db, $sql); 

// 每一页秀 5 笔记录 

$pager->Render($rows_per_page=5); 

?> 

结果如下: 

Figure 1. 简单分页功能 

每页显示记录的数目是由 Render() 来控制的,若没有传入指定的 row 数给 Render(),默认值每页秀 10 笔。 

另外,字段名称也可以改变,如下示范: 

<?php 

include('adodb/adodb.inc.php'); 

// 引入分页功能 

include('adodb/adodb-pager.inc.php'); 

// 启动 session 

session_start(); 

$db = ADONewConnection('mysql'); 

$mch="localhost"; 

$user="piza"; 

$pwd="ooo123"; 

$database="test"; 

$db->Connect($mch, $user, $pwd, $database); 

$sql = "select name as '姓名', year as '年纪' from t"; 

// 产生 pager 对象 

$pager = new ADODB_Pager($db, $sql); 

// 每一页秀 5 笔记录 

$pager->Render($rows_per_page=5); 

?> 

结果如下: 

Figure 2. 改变字段名称 

15. 输出 CSV 档 
ADODB 提供输出 CSV 档的方法,使用前,要将 toexport.inc.php 引入。 

<?php 

include('adodb/adodb.inc.php'); 

// 引入输出 CSV 文件功能 

include('adodb/toexport.inc.php'); 

$db = ADONewConnection('mysql'); 

$mch="localhost"; 

$user="piza"; 

$pwd="ooo123"; 

$database="test"; 

$db->Connect($mch, $user, $pwd, $database); 

$sql = "select name as '姓名', year as '年纪' from t"; 

$rs = $db->Execute($sql); 

// 秀出 CSV 格式 

print rs2csv($rs); 

?> 

结果如下: 

姓名,年纪 

abcde,45 

yyy,20 

ppp,34 

mmm,13 

hhh,41 

rrr,65 

kkk,29 

miso,154 

sss,89 

abc,18 

abcde,0 

uyt,58 

john,28 

也可用 tab 分隔字段,使用 rs2tab 方法如下: 

print rs2tab($rs, false); 

注: false 表示不显示字段名称 

结果如下: 

abcde 45 

yyy 20 

ppp 34 

mmm 13 

hhh 41 

rrr 65 

kkk 29 

miso 154 

sss 89 

abc 18 

abcde 0 

uyt 58 

john 28 

若是 print rs2tab($rs, true); 

结果如下: 

姓名 年纪 

abcde 45 

yyy 20 

ppp 34 

mmm 13 

hhh 41 

rrr 65 

kkk 29 

miso 154 

sss 89 

abc 18 

abcde 0 

uyt 58 

john 28 

也可以将结果由标准输出(STDOUT)显示,使用 rs2tabout 方法如下: 

print rs2tabout($rs); 

执行结果如下: 

Figure 1. 在console中显示结果 

也可以存成 CSV 档: 

// 档案路径 

$path = "/tmp/test.csv"; 

// 开档供写入 

$fhd = fopen($path, "w"); 

// 若开档成功 

if ($fhd) { 

// 则写入 CSV 

rs2csvfile($rs, $fhd); 

// 也可以使用 rs2tabfile($rs, $fhd); 

// 关档 

fclose($fhd); 

结果如下: 

[ols3@p web]$ cat /tmp/test.csv 

姓名,年纪 

abcde,45 

yyy,20 

ppp,34 

mmm,13 

hhh,41 

rrr,65 

kkk,29 

miso,154 

sss,89 

abc,18 

abcde,0 

uyt,58 

john,28 

16. 取出一定笔数的记录 (使用 SelectLimit) 
ADODB 提供一个 ADOConnect 函式 SelectLimit,可供您取出一定笔数的记录,用法如下: 

$conn->Connect($mch, $user, $pwd, $database); 

rs = $conn->SelectLimit("Select * from t", 3, 1); 

// 取出 3 笔、在第 1 笔之后 

// 秀出这 3 笔记录 

if ($rs) { 

while( $ar = $rs->FetchRow() ) { 

print $ar['name'] ." " . $ar['year']; 

print "<br>\n"; 

上式是说:在第 1 笔记录之后,取出 3 笔,也就是第 2、3、4 笔记录。 

结果如下: 
-------------------------------------- 

(mysql): select * from t LIMIT 1,3 

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

注意 ! SelectLimit 的写法刚好和 MySQL 语法相反 !

PHP 相关文章推荐
php学习 字符串课件
Jun 15 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
解析php DOMElement 操作xml 文档的实现代码
May 10 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
2014年10个最佳的PHP图像操作库
Jul 14 PHP
php实现插入排序
Mar 29 PHP
php实现比较两个字符串日期大小的方法
May 12 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
Yii2框架实现利用mpdf创建pdf文件功能示例
Feb 08 PHP
PHP 命名空间和自动加载原理与用法实例分析
Apr 29 PHP
php下判断数组中是否存在相同的值array_unique
Mar 25 #PHP
php获取mysql版本的几种方法小结
Mar 25 #PHP
非常不错的MySQL优化的8条经验
Mar 24 #PHP
php不用正则采集速度探究总结
Mar 24 #PHP
php木马攻击防御之道
Mar 24 #PHP
php入门小知识
Mar 24 #PHP
PHP 实例化类的一点摘记
Mar 23 #PHP
You might like
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
用 JSON 处理缓存
2007/04/27 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
node.js中的fs.rmdirSync方法使用说明
2014/12/16 Javascript
JavaScript+canvas实现七色板效果实例
2016/02/18 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
Bootstrap fileinput文件上传预览插件使用详解
2017/05/16 Javascript
JavaScript实现三级联动菜单实例代码
2017/06/26 Javascript
解决webpack打包速度慢的解决办法汇总
2017/07/06 Javascript
Angularjs中ng-repeat的简单实例
2017/08/25 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
2018/10/01 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
微信小程序实现录音功能
2019/11/22 Javascript
微信小程序实现星星评分效果
2020/11/01 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
python 根据时间来生成唯一的字符串方法
2019/01/14 Python
python交易记录整合交易类详解
2019/07/03 Python
Python imread、newaxis用法详解
2019/11/04 Python
python实现人脸签到系统
2020/04/13 Python
浅谈anaconda python 版本对应关系
2020/10/07 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
运动会领导邀请函
2014/01/10 职场文书
人事专员岗位职责范本
2014/03/04 职场文书
有关爱国演讲稿
2014/05/07 职场文书
小学语文教师竞聘演讲稿范文
2019/08/09 职场文书
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA