http://www.90t8.com/
http://www.90t8.com/
http://www.90t8.com/
(湘ICP备2021002763号-1)温馨提示:本博客只收集个人学习与研究IT的技术资料。谢绝攻击!!!
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
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 是 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 的重点方法。
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 了。
一旦安装好 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 是一定要引入的,其它,则视您要使用那一个功能,再引入该含入档即可。
由于 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 对象会提供许多处理的方法,以对象导向的说法,这些方法称为成员函式,这是外界存取此一对象的接口。
一旦联机对象建立之后,就有许多对象函式可供您使唤啦 ! 请看下一节的介绍。
程序开发的过程,为了方便查出出现问题可能的地方,通常我们会打开侦错模式,俟程序功能确实稳定之后,再将它关闭。ADODB 提供侦错模式,存取数据库时,能显示其运作方式。
打开侦错模式,使用法:
$conn->debug=true
关闭侦错模式,使用法:
$conn->debug=false
接着,使用 $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; }
接下来,您就可以设计您要执行的 sql 命令语法,然后付诸执行。
$sql = “这里放 SQL 的命令语法”;
$rs = $conn->Execute($sql);
其中,$rs 为回传的结果,若 $rs == false,则表示执行失败,您必须仔细检查一下。
您不一定要把命令语法放在 $sql 变量中,也可以直接放入 Execute( ) 括号中。若命令较短无妨,若命令较长,我建议您还是用一个变量 $sql 来设定命令字符串吧 !
下一节开始,为各位介绍 SQL 的基本命令,如:Insert、Select、Update、Delete 等等的用法。
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 )
———————————————————–
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(); // 可不用
?>
这里示范 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使用方法
返回的记录集形式
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();
}
?>
第十七届全国中学生创新作文大赛各赛区初赛试题
川渝赛区
(包括四川、重庆)
“背后”一词,本义有二:一是指人或事物的背面,与“前面”是一体两面的关系;一是指人或事物的后面,与“前面”不属一体,而有距离。在不同的语境中,“背后”被赋予了不同的引申意义:
1.“当事人不在场的情况下”,或者“背地里”。譬如周而复《上海的早晨》:“台上一套,台下一套;当面一套,背后一套。” 再如越王勾践的“卧薪尝胆”,面对宿敌是韬晦和忍辱,“背后”却在暗自努力,“十年生聚,十年教训”。
2.“没有其他人在场的情况下”,“一个人的时候”。譬如古人讲“慎独”,不仅在人前严格要求自己,而且在人后依然严格地规范自己而不逾矩,不放纵。
3.“地理空间上的后方”,或者“大后方”。譬如在“九一八”之后,日寇先后侵占我国东北、华北、华东、华中,那时候,四川(包括今天的重庆和四川)被称作大后方。川军战士王建堂背着父亲王者成制作的“死字旗”,出川抗日:“惟有慷慨直前,勇赴国难,断无退后之理。背后是四川吾乡,是吾乡父老,是吾国存续的希望”。
4.抽象意义上的后方,常常与依靠或支持的语义相关。在英文中,back一词也有支持的意思。巴金的《利娜·第四封信》写道:“他们又能干,又聪明,背后又有很大的靠山。”再如,饱受美国制裁的华为公司推出Mate 60 Pro以后,媒体评论道:“华为这次凭什么‘捅破天’?它背后是强大的中国!”
请以“背后”为题写一篇文章,不限题材,不限文体,字数在1200-1500字之间。
山东赛区
无论从哪方面说起,途中是认识人生最方便的地方。车中,船上和人行道可说是人生博览会的三张入场券,可惜许多人把它们当做废纸,空走了一生的路。我们有一句古话:“读万卷书,行万里路。”所谓行万里路自然是指走遍名山大川,通都大邑,但是我觉得换一个解释也是可以的。一条路你来往走了几万遍,凑成了万里这个数目,只要你真用了你的眼睛,你就可以算是懂得人生的人了。
——摘自梁遇春《途中》
这段话引发了你怎样的思考和感悟,请自拟题目,写一篇文章,不限题材,不限文体,字数在1200-1500字之间。
广东赛区
以“_________我在_________”为题,写一篇文章。
要求:
1. 把题目补充完整,可以在“我在”的前面或后面补充,也可以前后都补充;
2. 不限题材,不限文体,不要套作,不得抄袭,不得泄露个人信息;
3. 字数在1200-1500之间。
江浙沪赛区
(包括江苏、浙江、上海)
南北朝时期,丘迟在给友人的信中写道:“暮春三月,江南草长,杂花生树,群莺乱飞。”
唐代白居易有一首脍炙人口的词:“江南好,风景旧曾谙。日出江花红胜火,春来江水绿如蓝,能不忆江南?”
宋代王安石的几句诗朴素而动人:“草色浮云漠漠,树阴落日潭潭。三十六陂流水,白头想见江南。”
朱自清在北京看到荷塘,想到莲花虽然“过人头”了,却不见一些流水的影子,“这令我到底惦着江南了”。
华裔新加坡歌手林俊杰的一首歌中则有这样的句子:“离愁能有多痛 痛有多浓/当梦被埋在江南烟雨中/心碎了才懂”。
在一代代中国人的心中,所谓江南真是乡愁之所系,它显然不只是地理性的存在。2023年的你,对于江南,是否仍然能与古人产生共鸣,又是否有自己独到的体验、发现与想象呢?
试以江南为题眼(可与若干辅助性的字眼组成题目,如“我**江南”或“江南的**”等等),写一篇1200-1500字的文章,让人更懂江南(而不只是某个特定的地方),也更懂身在江南的你。不可写成诗歌。
北京赛区
共情,又叫同理心,指站在对方的角度去理解其感受。共情能力较强的人,往往能够设身处地地体验他人处境,从而较为深切地理解他人心情。共情,可以表现在人际交往中,可以体现在阅读欣赏中,也可以显现在文化交流中……有人说,共情有助于解决很多问题;也有人说,只有共情是不够的……
请以“共情”为内容,自拟标题,写一篇文章。不限题材,不限文体,字数在1200-1500 字之间。
云南赛区
“云”,在汉语词典中有以下几种解释。
①说:曰。如:人云亦云。《论语·子罕》:“子云:吾不试,故艺。”
②为;是。《后汉书·袁术传》:“虽云匹夫,霸王可也。”
③有。《荀子·法行》:“事已败矣,乃重太息,其云益乎?”
④友善。《诗·小雅·正月》:“洽比其邻,昏姻孔云。”
⑤如此。《左传·襄公二十八年》:“子之言云,又焉用盟?”
⑥或许。《列子·力命》:“仲父之病疾矣,不可讳,云至于大病,则寡人恶乎属国而可?”
⑦作语助,无义。(1)用于语首。《诗·邺风·简兮》:“云谁之思?西方美人。”等。
⑧大气中的水蒸气。例,云,云彩。
⑨网络。狭义上讲,云计算就是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且可以看成是无限扩展的,只要按使用量付费就可以。从广义上说,云计算(cloud computing)是与信息技术、软件、互联网相关的一种服务,这种计算资源共享池叫做“云”,云计算把许多计算资源集合起来,通过软件实现自动化管理,只需要很少的人参与,就能让资源被快速提供。也就是说,计算能力作为一种商品,可以在互联网上流通,就像水、电、煤气一样,可以方便地取用,且价格较为低廉。
⑩教育云。实质上是指教育信息化的一种发展。具体的,教育云可以将所需要的任何教育硬件资源虚拟化,然后将其传入互联网中,以向教育机构和学生老师提供一个方便快捷的平台。现在流行的慕课就是教育云的一种应用。慕课MOOC,指的是大规模开放的在线课程。现阶段慕课的三大优秀平台为Coursera、edX以及Udacity,在国内,中国大学MOOC也是非常好的平台。
请以“云”为题写一篇文章,不限题材,不限文体,字数在1200-1500字之间。
湖南赛区
瞬间作为一个汉语词语,一指船行如箭,瞬间来到近旁,二指形容刹那间,须臾,一眨眼的工夫。也可以作为文学描写中形容时间流逝迅速的单位。
请以“瞬间之美”为题写一篇文章,不限题材,不限文体,字数在1200-1500 字。
福建赛区
拨开你长睫上重重的夜
就发现神话很守时
星空,非常希腊
—— 摘自余光中《重上大度山》
上面诗句出自福建永春籍著名诗人余光中的《重上大度山》,其中“星空,非常希腊”一句,曾因“西化”的句法,在文坛引起不小争议。有人批评说这是西化严重的“病句、劣句”,有人则赞赏这是使中文写作更加鲜活多样的“善性西化”。这不禁让人联想起荷兰后印象派画家文森特·梵高最富盛名的油画作品《星空》(又名《星月夜》)——同样在问世之初遭遇了毁誉参半的命运。
请结合你对文艺创新及创意写作的理解,以“星空”为题,完成一篇文章,不限题材,不限文体,字数在1200-1500字之间。
东北赛区
(包括黑龙江、吉林、辽宁)
“原来”是汉语中的一个常用词。它在古代白话中也有偶见,但在现代的意义更加丰富微妙。综合起来,可作以下几种用法和理解:
1.作为名词、形容词或副词,表示原本、起初,本来的、没有改变的,以往某个时期、当初……这是最寻常的意义;
2.作为副词,用于发现从前不知道的情况,含有恍然醒悟的意味,例如:“我以为是谁呢,原来是你”;
3.“原”有推求本源的意思,因此就词语结构来说,“原来”含有“探究本来、原其来处”的意思,这时带有动词性质。
在变动不居的时间长河中,“原来”也往往引起人的复杂意绪。
对你来说,“原来”意味着什么?引起你的哪些事实的回忆、情感的激荡、情节的想象、哲理的品味与思索?
请以“原来”为题写一篇文章,题材、体裁均不限,字数在1200-1500字之间。
综合赛区
(包括天津、安徽、河北、山西、内蒙古、江西、河南、湖北、广西、海南、贵州、陕西、甘肃、青海、宁夏、新疆、西藏、香港、澳门、台湾)
请以“诗歌里的秋季”为题写一篇文章,不限题材,不限文体,字数在1200-1500字之间。
https://www.cxzwds.cn/school/competition_process
生机育生命,生命寓生机
张珑献 河南财经政法大学
生机里有生命的影子,生命长大是生机的样子。
——题记
篱笆扎成的小院,围起了属于农人的温馨。家家户户,便成了村落。村落里有啄米的母鸡,有织布的妇人,有戏耍的孩童。映着村落的江河上,有渔人,他们或打鱼,或收网,或归家,或闲聊。一动一静、一呼一吸,无不是生命,无不是生机。
远山重叠中,是飘起炊烟的人家,青青绿绿下,是掩不住生机,是人间的烟火气。自然给予了人类以生存的条件,而人类又带给了自然满满的、无可替代的生机。
渔船远了,飘向浩渺的江面。离了山中的家,绕过重重山水,便见了江面上精巧又阔大的楼台。木桥长长,连接了江心与陆地,也连接了现实与向往,“勾心斗角”的亭台可供贵族赏游。远离了官场,身处于盎然之中,不知他们是否也会想过归隐山林,过起日出而作、日落而息的农家生活,成为这天地间的一粒沙。虽渺小,却幸福;虽微弱,却生机。金碧辉煌的楼台可以望见山中质朴的村落。用浮生荣华换一世安宁。
郁郁葱葱里,有错落人家。院中的小路,一直延伸到江边。江边有山树,用矿石色点染,格外明丽。山间树林,生机勃勃。林荫自山脚而始,沿山路而上,到山顶而终。生动了山石,点染了人家。村落的炊烟,在山间袅袅升起,勾着半山腰的浮云,唱出了生命与自然的绝响。清溪淙淙,细笔勾勒出的水流,以瀑布的姿态,飞驰急下,既而汇入澜澜江水,山崖上,跑出家院的孩童也为这景色倾倒。望这山,这树,是满眼的生机,盎然的绿色中有江山的秀丽和盛世的太平。
青山与天空相照应,是天地的辽阔。以天空为背景,村落成了缀在江山上的明珠,散发着生命的光芒。旷野的鸟,在《千里江山图》中找到了天空。浅浅淡淡,没有工笔勾勒,随性自然中是飞鸟的自由。或形单影只,或成群结队,但都无比真实。小小的鸟,点在不加修饰天空中,映着缭绕的云,真真是一幅绝佳的旷野飞鸟图,铺开在天幕上,也闯入了小院中妇人的织机里。
其实,村落就是生命,置于自然中,就是最好的生机。
王希孟接过宋徽宗的画笔,泼墨写意。将大宋的江山万里,浓缩进这幅《千里江山图》,青矿赭石的山水,永不暗淡,正寓意这太平人间万世长留,这村落的烟火气生生不息。《千里江山图》的重山峻岭中,是作者画不尽的意气风发,十八岁的年纪,天下至尊的赏识,让王希孟无法不自傲。这样的少年意气,被淋漓尽致地画进了山水中。所以,无处不明快,无处不生机。开朗的心情,阔大的境界,更让这幅江山图成为千古一绝。
村落人家,成了画中最生动的线索。平远、高远、深远,在画中都得到了最独特的诠释。《千里江山图》是宋人对当时太平盛世最真诚的告白,是生机中的生命,生命中的生机。
作者简介:张珑献,河南财经政法大学学生。河南省青少年作家协会会员、河南省报告文学学会会员、洛阳市作家协会会员、洛阳市隋唐史学会会员。河南省三好学生、洛阳市优秀共青团员。曾获得叶圣陶杯现场决赛“全国一等奖”等多种奖项。出版个人散文集《到远方去》。