音韵与审押韵、察平仄前几讲,讲述了古代汉语音韵的基本知识:声母、韵母、声调和标音。从本讲开始,讲述运用这些知识,解决古代诗文阅读中的问题。一运用音韵知识审察押韵押韵,就是在诗词歌赋中,某些句子的末尾用同韵(即韵腹、韵尾相同)的字,使得音调和谐悦耳。作古体诗,一般依照古韵;作近体诗,则按韵书规定。《平水韵》反映了唐宋用韵的部类;直至现代,人们作近体诗,仍然依照《平水韵》。宋词根据宋代实际语音用韵;今人作词依据清朝人编撰的《词林正韵》。作曲用韵按照《中原音韵》。古人所作的诗词歌赋,即使今天读起来仍然押韵,古今语音也是有差别的;更不用说有些作品今天读起来已经不押韵了。我们学习音韵知识,要明白它们在当时都是押韵的。岂曰无衣?与子同袍。王于兴师,修我戈矛。与子同仇!岂曰无衣?与子同泽。王于兴师,修我矛戟。与子偕作!岂曰无衣?与子同裳。王于兴师,修我甲兵。与子偕行!(《诗·秦风·无衣》)——第一章“袍、矛、仇”,同属阴声韵幽部[u];今“袍、矛”韵母为ao,“仇”为ou。第二章“泽、戟、作”,同属入声韵铎部[ak],今“泽”为e,“戟”为i,“作”为uo。第三章“裳、兵、行”,同属阳声韵阳部[aŋ],今“裳”为ang,“兵、行”为ing。春城无处不飞花,寒食东风御柳斜。日暮汉宫传蜡烛,轻烟散入五侯家。(韩翃 《寒食》)——“花、家、斜”,在《平水韵》中同属麻部。麻部在《中原音韵》中分化为家麻、车遮两部;到现代普通话演变为a、e,“花、家”韵母为a、ia,“斜”韵母为ie。东皋薄暮望,徙倚欲何依。树树皆秋色,山山唯落晖。牧人驱犊返,猎马带禽归。相顾无相识,长歌怀采薇。(王绩《野望》)——“依、晖、归、薇”,在《平水韵》中同属微部;微部在《中原音韵》中归入齐微部;到现代普通话分化为i、ei,“依”韵母为i,“晖、归、薇”韵母为ei。风急天高猿啸哀,渚清沙白鸟飞回。无边落木萧萧下,不尽长江滚滚来。万里悲秋常作客,百年多病独登台。艰难苦恨繁霜鬓,潦倒新停浊酒杯。(杜甫《登高》)——“哀、回、来、台、杯”,《平水韵》中同属灰部。灰部在《中原音韵》中部分归入齐微部,部分归入皆来部;到现代普通话,齐微部中分化出ei,皆来部演变为ai,“哀、来、台” 韵母为ai,“回、杯”韵母为ei。六王毕,四海一。蜀山兀 ,阿房出。(杜牧《阿房宫赋》开头)——“毕、一、兀、出”,在《平水韵》中“毕、一、出”属入声质部,“兀”属入声月部,“质、月”音近,可以合韵。到《中原音韵》入声韵消失,归入阴声韵;现代普通话中“毕、一”韵母为i,“兀、出”韵母为u。千古江山,英雄无觅孙仲谋处。舞榭歌台,风流总被雨打风吹去。斜阳草树,寻常巷陌,人道寄奴曾住。想当年,金戈铁马,气吞万里如虎。(辛弃疾《永遇乐·京口北固亭怀古》上阙)——“处、去、住、虎”,《词林正韵》为第四部仄声(语、噳、姥、御、遇、暮通用),《中原音韵》为鱼模部;现代普通话分化为u、ü,“处、住、虎”为u,“去”为ü。二运用音韵知识审察平仄讲究平仄,是近体诗和词的显著特点之一。平仄相间,语音就有了抑扬顿挫之美。如一首“仄起仄收式”五律,平仄安排是这样的(括号表示可平可仄):(仄)仄平平仄,平平(仄)仄平。(平)平平仄仄,(仄)仄仄平平。(仄)仄平平仄,平平(仄)仄平。(平)平平仄仄,(仄)仄仄平平。需要注意,古代诗词中的平仄,不能用现代普通话的声调来看。古代的入声字在演变为现代普通话(入派四声)时,有的派入平声了,特别要注意识别这种仄声字。下面是一首“仄起仄收式”五律:好雨知时节,当春乃发生。随风潜入夜,润物细无声。野径云俱黑,江船火独明。晓看红湿处,花重锦官城。(杜甫《春夜喜雨》)——这首诗有7个入声字:“节、发、入、物、黑、独、湿”。其中“入、物”二字,在普通话里读仄声去声;“节、发、黑、独、湿”5个字,在普通话里读平声。这5个字,若按普通话读,则不符合平仄要求。此外,“俱”,普通话读jù,古代读jū;“看”,普通话里有kān和kàn两个读音,古代都读kān。这两个字按普通话读,也不符合平仄要求。不仅近体诗讲究平仄,词也讲究。词牌“浣溪沙”平仄安排是这样的:(仄)仄(平)平(仄)仄平,(平)平(仄)仄仄平平。(平)平(仄)仄仄平平。(仄)仄(平)平平仄仄,(平)平(仄)仄仄平平。(平)平(仄)仄仄平平。下面是一首《浣溪沙》(作者晏殊):一曲新词酒一杯,去年天气旧亭台。夕阳西下几时回。 无可奈何花落去,似曾相识燕归来。小园香径独徘徊。——这首词有4个入声字:“曲、落、识、独”。其中,“曲、落”二字,普通话读仄声;“识、独”二字,普通话读平声。“识、独”,若按普通话读,则不合平仄要求。最后,需要说明,学习古汉语音韵,只要求审察押韵和平仄,而不是要求照古音读。
分类: 网络转载
清明日对酒
清明日对酒
高翥〔宋代〕
南北山头多墓田,清明祭扫各纷然。
纸灰飞作白蝴蝶,泪血染成红杜鹃。
日落狐狸眠冢上,夜归儿女笑灯前。
人生有酒须当醉,一滴何曾到九泉。
90听音乐网
PHP中的GD库操作指南
PHP中的GD库操作指南
王林
发布: 2023-05-20 14:40:40
原创
3059人浏览过
一、什么是gd库?
GD库是一组用于创建和处理各种图像格式的库函数,是PHP中最为常用的图像处理库之一。
二、安装GD库
在CentOS/RedHat下安装GD库
1.安装PHP的GD扩展库
yum install php-gd
2.重启web服务器
service httpd restart
3.查看PHP支持的GD库版本
php -i | grep -i gd
在Ubuntu/Debian下安装GD库
1.安装php5-gd模块
apt-get update && apt-get install php5-gd
2.重启web服务器
service apache2 restart
3.查看PHP支持的GD库版本
php -i | grep -i gd
三、GD库的基本操作
1.创建图像
1)创建一个200X200像素的黑色图像
$image = imagecreate(200,200);
$black = imagecolorallocate($image,0,0,0);
imagefill($image,0,0,$black);
2)在图像中添加文本
$white = imagecolorallocate($image,255,255,255);
$text = ‘Hello, GD!’;
imagettftext($image,20,0,70,100,$white,’arial.ttf’,$text);
3)保存图像到文件
imagepng($image,’test.png’);
4)释放内存
imagedestroy($image);
2.图像处理
1)缩放图像
$src_image = imagecreatefrompng(‘test.png’);
$src_width = imagesx($src_image);
$src_height = imagesy($src_image);
$new_width = $src_width * 0.5;
$new_height = $src_height * 0.5;
$new_image = imagecreatetruecolor($new_width,$new_height);
imagecopyresampled($new_image,$src_image,0,0,0,0,$new_width,$new_height,$src_width,$src_height);
imagepng($new_image,’test-resized.png’);
2)添加边框
$border_color = imagecolorallocate($new_image,128,128,128);
imagerectangle($new_image,0,0,$new_width-1,$new_height-1,$border_color);
imagepng($new_image,’test-bordered.png’);
3)裁剪图像
$cropped_image = imagecrop($new_image,[‘x’=>40,’y’=>40,’width’=>100,’height’=>100]);
imagepng($cropped_image,’test-cropped.png’);
4)模糊图像
$blurred_image = imagefilter($new_image,IMG_FILTER_GAUSSIAN_BLUR);
imagepng($blurred_image,’test-blurred.png’);
3.操作图像元素
1)获取像素RGB值
$pixel = imagecolorat($new_image,50,50);
$red = ($pixel >> 16) & 0xFF;
$green = ($pixel >> 8) & 0xFF;
$blue = $pixel & 0xFF;
2)修改像素RGB值
$new_color = imagecolorallocate($new_image,255,0,0);
imagesetpixel($new_image,50,50,$new_color);
imagepng($new_image,’test-pixel.png’);
3)填充图像
$fill_color = imagecolorallocate($new_image,0,255,0);
imagefill($new_image,0,0,$fill_color);
imagepng($new_image,’test-filled.png’);
四、GD库的高级操作
1.水印处理
1)添加文字水印
$watermark_text = ‘COPYRIGHT’;
$font_size = 20;
$font_color = imagecolorallocate($new_image,0,0,0);
imagettftext($new_image,$font_size,0,10,20,$font_color,’arial.ttf’,$watermark_text);
imagepng($new_image,’test-watermark.png’);
2)添加图片水印
$watermark_image = imagecreatefrompng(‘watermark.png’);
$watermark_width = imagesx($watermark_image);
$watermark_height = imagesy($watermark_image);
$pos_x = ($new_width – $watermark_width) / 2;
$pos_y = ($new_height – $watermark_height) / 2;
imagecopy($new_image,$watermark_image,$pos_x,$pos_y,0,0,$watermark_width,$watermark_height);
imagepng($new_image,’test-watermark.png’);
2.画图操作
1)画直线
$line_color = imagecolorallocate($new_image,0,0,255);
imageline($new_image,0,0,$new_width,$new_height,$line_color);
imagepng($new_image,’test-line.png’);
2)画矩形
$rect_color = imagecolorallocate($new_image,0,255,0);
imagerectangle($new_image,20,20,$new_width-20,$new_height-20,$rect_color);
imagepng($new_image,’test-rectangle.png’);
3)画圆形
$circle_color = imagecolorallocate($new_image,255,0,0);
$circle_center_x = $new_width/2;
$circle_center_y = $new_height/2;
$circle_diameter = $new_height * 0.8;
$circle_radius = $circle_diameter / 2;
imageellipse($new_image,$circle_center_x,$circle_center_y,$circle_diameter,$circle_diameter,$circle_color);
imagepng($new_image,’test-circle.png’);
五、总结
本文介绍了GD库的基本操作和高级操作,包括图像创建、图像处理、操作图像元素、水印处理、画图操作等内容。GD库是PHP开发中非常实用的图像处理工具之一,可以用于制作图片验证码、生成二维码、图表、海报等。掌握GD库的使用技能可以帮助PHP开发者更加高效地完成业务需求。
以上就是PHP中的GD库操作指南的详细内容,更多请关注php中文网其它相关文章!
PHP修改图片大小
<?php
function resizeImage($sourceImage, $targetImage, $maxWidth, $maxHeight) {
list($sourceWidth, $sourceHeight, $sourceType) = getimagesize($sourceImage);
switch ($sourceType) {
case IMAGETYPE_JPEG:
$sourceResource = imagecreatefromjpeg($sourceImage);
break;
case IMAGETYPE_PNG:
$sourceResource = imagecreatefrompng($sourceImage);
break;
case IMAGETYPE_GIF:
$sourceResource = imagecreatefromgif($sourceImage);
break;
default:
return false;
}
$targetWidth = $sourceWidth;
$targetHeight = $sourceHeight;
if ($sourceWidth > $maxWidth || $sourceHeight > $maxHeight) {
$aspectRatio = $sourceWidth / $sourceHeight;
if (($maxWidth / $maxHeight) > $aspectRatio) {
$targetWidth = $maxHeight * $aspectRatio;
$targetHeight = $maxHeight;
} else {
$targetWidth = $maxWidth;
$targetHeight = $maxWidth / $aspectRatio;
}
}
$targetResource = imagecreatetruecolor($targetWidth, $targetHeight);
imagecopyresampled($targetResource, $sourceResource, 0, 0, 0, 0, $targetWidth, $targetHeight, $sourceWidth, $sourceHeight);
switch ($sourceType) {
case IMAGETYPE_JPEG:
imagejpeg($targetResource, $targetImage, 80); // 80 是图片质量,可根据需求调整
break;
case IMAGETYPE_PNG:
imagepng($targetResource, $targetImage);
break;
case IMAGETYPE_GIF:
imagegif($targetResource, $targetImage);
break;
default:
return false;
}
imagedestroy($sourceResource);
imagedestroy($targetResource);
return true;
}
//这个命令尝试修改图片大小,注意要启用GD库。
resizeImage(’11.png’, ’22.png’, 1000, 600);
王维《菩提寺》诗两首
王维《菩提寺》诗两首
其一:
《菩提寺禁裴迪来相看说逆贼等凝碧池上作音乐供奉人等举声便一时泪下私成口号诵示裴迪》
万户伤心生野烟,
百官何日再朝天。
秋槐叶落空宫里,
凝碧池头奏管弦。
其二:
《菩提寺禁口号又示裴迪》
细赏之,蛮有趣。
有意深入了解其义者,请百度百科。
ADODB 入门
1. 前言
ADODB 是 Active Data Objects Data Base 的简称,它是一种 PHP 存取数据库的函式组件。现在 SFS3 系统 (校园自由软件交流网学务系统) 计划的主持人陈莹光老师,决定采用此一组件,为了让更多有心参与该项目的伙伴们能够顺利加入发展的行列,小弟认为有必要把 ADODB 的中文入门介绍写出来,以方便伙伴们参考备查。
虽然 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 内部会自动完成移至下一笔记录的动作。
https://www.xp.cn/b.php/21544.html
常用的adodb使用方法
常用的adodb使用方法
返回的记录集形式
define(‘ADODB_FETCH_DEFAULT’,0);
define(‘ADODB_FETCH_NUM’,1);
define(‘ADODB_FETCH_ASSOC’,2);
define(‘ADODB_FETCH_BOTH’,3);
以上的常量,是在adodb.inc.php里定义的,也就是$ADODB_FETCH_MODE 这个变量可以设置的值
常用的是:ADODB_FETCH_NUM 或 ADODB_FETCH_ASSOC
ADODB_FETCH_NUM 返回的记录集中的索引,是数字形式,即数据库字段的排序顺序值
ADODB_FETCH_ASSOC 返回的记录集中的索引,是原数据库字段名
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同时返回 ADODB_FETCH_NUM, ADODB_FETCH_ASSOC的值,某些数据库不支持
An example:
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute(‘select * from table’);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $db->Execute(‘select * from table’);
print_r($rs1->fields); # 返回的数组是: array([0]=>’v0′,[1] =>’v1′)
print_r($rs2->fields); # 返回的数组是: array([‘col1′]=>’v0’,[‘col2′] =>’v1’)
< ?php
/*
常用的ADODB使用方法
整理:飞豹游侠 QQ:8527385 E-mail:liuchengcn # 163.com
如有错误之处,敬请谅解,并QQ或E-mail通知我,谢谢
*/
//定义数据库变量
$DB_TYPE = “mysql”;
$DB_HOST = “localhost”;
$DB_USER = “root”;
$DB_PASS = “”;
$DB_DATABASE = “ai-part”;
require_once(“../adodb/adodb.inc.php”);
$db = NewADOConnection(“$DB_TYPE”);//建立数据库对象
$db->debug = true;//数据库的DEBUG测试,程序开发期,可设置为true,正式版要注释掉这行,(默认值是false)
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
/*
返回的记录集形式
define(‘ADODB_FETCH_DEFAULT’,0);
define(‘ADODB_FETCH_NUM’,1);
define(‘ADODB_FETCH_ASSOC’,2);
define(‘ADODB_FETCH_BOTH’,3);
以上的常量,是在adodb.inc.php里定义的,也就是$ADODB_FETCH_MODE 这个变量可以设置的值
常用的是:ADODB_FETCH_NUM 或 ADODB_FETCH_ASSOC
ADODB_FETCH_NUM 返回的记录集中的索引,是数字形式,即数据库字段的排序顺序值
ADODB_FETCH_ASSOC 返回的记录集中的索引,是原数据库字段名
ADODB_FETCH_BOTH 和 ADODB_FETCH_DEFAULT 是同时返回 ADODB_FETCH_NUM, ADODB_FETCH_ASSOC的值,某些数据库不支持
An example:
$ADODB_FETCH_MODE = ADODB_FETCH_NUM;
$rs1 = $db->Execute(‘select * from table’);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$rs2 = $db->Execute(‘select * from table’);
print_r($rs1->fields); # 返回的数组是: array([0]=>’v0′,[1] =>’v1′)
print_r($rs2->fields); # 返回的数组是: array([‘col1′]=>’v0’,[‘col2′] =>’v1’)
*/
//连接数据库,方法有Connect,PConnect,NConnect,一般使用Connect. NConnect是连接特殊的数据库时才用
if (!@$db->Connect(“$DB_HOST”, “$DB_USER”, “$DB_PASS”, “$DB_DATABASE”)) {
exit(‘服务器忙,请稍候再访问’);
}
/*
$db-> $rs-> 此类的使用方法
Execute($sql,$inputarr=false),执行参数中的$sql语句,后面的那个$inputarr参数,一般情况下不需要
SelectLimit($sql,$numrows=-1,$offset=-1,$inputarr=false) $numrows:取几条记录,$offset,从第几条开始取,SelectLimit,一般是用于分页,或只取出几条记录的时候用
*/
//Example: 取出多个记录
$sql = “SELECT * FROM table ORDER BY id DESC”;
if (!$rs = $db->Execute($sql)) {//执行SQL语句,并把结果返回给$rs变量
echo $db->ErrorMsg();//这个是打印出错信息
$db->Close();//关闭数据库
exit();
}
while (!$rs->EOF) {//遍历记录集
echo $rs->fields[‘username’] . ‘
‘;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$rs->Close();//关闭它,以便释放内存,每次操作完都进行一次关闭,养成编程的好习惯
//插入新记录
$sql = “INSERT table (user_type,username) VALUES (3, ‘liucheng’)”;
$db->Execute($sql);
//更新记录
$sql = “UPDATE table SET user_type=3 WHERE ;
$db->Execute($sql);
//删除记录
$sql = “DELETE FROM table WHERE ;
$db->Execute($sql);
// 取单个记录
//$db->GetRow($sql), 取出SQL中的第一条记录,并返回一个数组,如果出错,则返回false
$sql = “SELECT username,password,user_type FROM table WHERE ;
$data_ary = $db->GetRow($sql);
if ($data_ary == false) {//如果用===,可能不是你想要的结果
echo ‘没有找到此记录’;
exit();
} else {
echo $data_ary[‘username’] . ‘ ‘ . $data_ary[‘password’] . ‘ ‘ . $data_ary[‘user_type’] . ‘
‘;
}
//这里没有用到$rs,则不需要$rs->Close();
//另一种方法 (使用上面的方法比较好,又方便)
$sql = “SELECT username,password,user_type FROM table WHERE ;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
if (!$result = $rs->FetchRow()) {
echo ‘没有找到此记录’;
exit();
} else {
echo $result[‘username’] . ‘ ‘ . $result[‘password’] . ‘ ‘ . $result[‘user_type’] . ‘
‘;
}
//$db->GetOne($sql) 取出SQL中的第一条记录的第一个字段的值,如果出错,则返回false
$sql = “SELECT COUNT(id) FROM table”;
$record_nums = $db->GetOne($sql);
echo $record_nums;
$sql = “SELECT username,password,user_type FROM table WHERE user_;
$result = $db->GetOne($sql);
echo $result;//此值为记录中的username的值
/*
在进行添加,修改,删除记录操作时,要对字符串型的字段,使用$db->qstr()对用户输入的字符进行处理,对数字型字段,要在之前,进行数据判断
更新记录,注意:这是针对php.ini中,magic_quotes被设置为Off的情况,如果不确定,可以使用
$db->qstr($content,get_magic_quotes_gpc())
注意:content= 等号右边,没有单引号
*/
$sql = “UPDATE table SET content=” . $db->qstr($content) . ” WHERE ;
$db->Execute($sql);
/*$db->Insert_ID(),无参数,返回刚刚插入的那条记录的ID值,仅支持部分数据库,带auto-increment功能的数据库,如PostgreSQL, MySQL 和 MS SQL
*/
//Example:
$sql = “INSERT table (user_type,username) VALUES (3, ‘liucheng’)”;
$db->Execute($sql);
$data_id = $db->Insert_ID();
echo $data_id;
/*$db->GenID($seqName = ‘adodbseq’,$startID=1),产生一个ID值.$seqName:用于产生此ID的数据库表名,$startID:起始值,一般不用设置,它会把$seqName中的值自动加1.支持部分数据库,某些数据库不支持
Insert_ID,GenID,一般我用GenID,使用它的目的,是在插入记录后,要马上得到它的ID时,才用
*/
/*Example:
先创建一个列名为user_id_seq的表,里面只有一个字段,id,int(10),NOT NULL,然后插入一条值为0的记录
*/
$user_id = $db->GenID(‘user_id_seq’);
$sql = “INSERT table (id, user_type,username) VALUES (” . $user_id . “, 3, ‘liucheng’)”;
$db->Execute($sql);
/*
$rs->RecordCount(),取出记录集总数,无参数
它好像是把取出的记录集,用count()数组的方法,取得数据的数量
如果取大量数据,效率比较慢,建议使用SQL里的COUNT(*)的方法
$sql = “SELECT COUNT(*) FROM table”, 用此方法时,不要在SQL里加ORDER BY,那样会降低执行速度
Example:
*/
$sql = “SELECT * FROM table ORDER BY id DESC”;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$record_nums = $rs->RecordCount();
/*
如果想对某一结果集,要进行两次同样的循环处理,可以用下面方法
以下,只是一个例子,只为说明$rs->MoveFirst()的使用方法
*/
$sql = “SELECT * FROM table ORDER BY id DESC”;
if (!$rs = $db->Execute($sql)) {
echo $db->ErrorMsg();
$db->Close();
exit();
}
$username_ary = array();
while (!$rs->EOF) {
$username_ary[] = $rs->fields[‘username’]
echo $rs->fields[‘username’] . ‘
‘;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$username_ary = array_unique($username_ary);
$rs->MoveFirst();//将指针指回第一条记录,无参数
while (!$rs->EOF) {
echo $rs->fields[‘password’] . ‘
‘;//print_r($rs->fields)试试,$rs->fields[‘字段名’],返回的是这个字段里的值
$rs->MoveNext();//将指针指到下一条记录,不用的话,会出现死循环!
}
$rs->Close();
/*
当本页程序,对数据库的操作完毕后,要$db->Close();
*/
$db->Close();
/*一个不错的方法 */
if (isset($db)) {
$db->Close();
}
?>