php操作access数据
<?php
//--------------------------------------------------------------------
//FileName:class.php
//Summary: Access数据库操作类
//CreateTime: 2006-8-10
//LastModifed:
//copyright (c)2006 freeweb.nyist.net/~chairy [email]chaizuxue@163.com[/email]
// 使用范例:
//$databasepath="database.mdb";
//$dbusername="";
//$dbpassword="";
//include_once("class.php");
//$access=new Access($databasepath,$dbusername,$dbpassword);
//--------------------------------------------------------------------
class Access
{
var $databasepath,$constr,$dbusername,$dbpassword,$link;
function Access($databasepath,$dbusername,$dbpassword)
{
$this->databasepath=$databasepath;
$this->username=$dbusername;
$this->password=$dbpassword;
$this->connect();
}
function connect()
{
$this->constr="DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath($this->databasepath);
$this->link=odbc_connect($this->constr,$this->username,$this->password,SQL_CUR_USE_ODBC);
return $this->link;
if($this->link) echo "恭喜你,数据库连接成功!";
else echo "数据库连接失败!";
}
function query($sql)
{
return @odbc_exec($this->link,$sql);
}
function first_array($sql)
{
return odbc_fetch_array($this->query($sql));
}
function fetch_row($query)
{
return odbc_fetch_row($query);
}
function total_num($sql)//取得记录总数
{
return odbc_num_rows($this->query($sql));
}
function close()//关闭数据库连接函数
{
odbc_close($this->link);
}
function insert($table,$field)//插入记录函数
{
$temp=explode(',',$field);
$ins='';
for ($i=0;$i<count($temp);$i++)
{
$ins.="'".$_POST[$temp[$i]]."',";
}
$ins=substr($ins,0,-1);
$sql="INSERT INTO ".$table." (".$field.") VALUES (".$ins.")";
$this->query($sql);
}
function getinfo($table,$field,$id,$colnum)//取得当条记录详细信息
{
$sql="SELECT * FROM ".$table." WHERE ".$field."=".$id."";
$query=$this->query($sql);
if($this->fetch_row($query))
{
for ($i=1;$i<$colnum;$i++)
{
$info[$i]=odbc_result($query,$i);
}
}
return $info;
}
function getlist($table,$field,$colnum,$condition,$sort="ORDER BY id DESC")//取得记录列表
{
$sql="SELECT * FROM ".$table." ".$condition." ".$sort;
$query=$this->query($sql);
$i=0;
while ($this->fetch_row($query))
{
$recordlist[$i]=getinfo($table,$field,odbc_result($query,1),$colnum);
$i++;
}
return $recordlist;
}
function getfieldlist($table,$field,$fieldnum,$condition="",$sort="")//取得记录列表
{
$sql="SELECT ".$field." FROM ".$table." ".$condition." ".$sort;
$query=$this->query($sql);
$i=0;
while ($this->fetch_row($query))
{
for ($j=0;$j<$fieldnum;$j++)
{
$info[$j]=@odbc_result($query,$j+1);
}
$rdlist[$i]=$info;
$i++;
}
return $rdlist;
}
function updateinfo($table,$field,$id,$set)//更新记录
{
$sql="UPDATE ".$table." SET ".$set." WHERE ".$field."=".$id;
$this->query($sql);
}
function deleteinfo($table,$field,$id)//删除记录
{
$sql="DELETE FROM ".$table." WHERE ".$field."=".$id;
$this->query($sql);
}
function deleterecord($table,$condition)//删除指定条件的记录
{
$sql="DELETE FROM ".$table." WHERE ".$condition;
$this->query($sql);
}
function getcondrecord($table,$condition="")// 取得指定条件的记录数
{
$sql="SELECT COUNT(*) AS num FROM ".$table." ".$condition;
$query=$this->query($sql);
$this->fetch_row($query);
$num=odbc_result($query,1);
return $num;
}
}
?>
$loginname = ""; // 接口帐号
$pass = ""; // 接口密码
$code = "";
$subid = "";
$sender = "";
$receivers = ""; // 接收号码,多个号码间用 ; 分隔
$settimer = ""; // 定时发送时间 格式:YYYY-MM-DD HH:MM
$message = urlencode("");
$cmd = "send";
$allowforward = "";
$recordid_client = ""; // 短信的客户端记录号
$http = "http://interface.37du.net/interface_sms_url.ajax";
$file = $http."?loginname=".$loginname."&pass=".$pass."&code=".$code."&subid=".$subid."&sender=".$sender."&receivers=".$receivers."&settimer=".$settimer."&message=".$message."&cmd=".$cmd."&allowforward=".$allowforward."&recordid_client=".$recordid_client;
$xml = new XMLReader();
$xml->open($file);
$xml->setParserProperty(2,true);
while ($xml->read()) {
switch ($xml->name) {
case "Success": $xml->read();
$Success = $xml->value;
$xml->read();
break;
case "Fail": $xml->read();
$Fail = $xml->value;
$xml->read();
break;
case "RetCode": $xml->read();
$RetCode = $xml->value;
$xml->read();
break;
case "SmsRemain": $xml->read();
$SmsRemain = $xml->value;
$xml->read();
break;
case "ErrPhones": $xml->read();
$ErrPhones = $xml->value;
$xml->read();
break;
}
}
$xml->close();
// $Success 发送成功条数
// $Fail 发送失败条数
// $RetCode 发送状态值
// $SmsRemain 接口帐号余额
// $ErrPhones 发送失败号码
php验证码程序 验证码 代码 php php 图片验证码
<?php
/*
@date 20080514
@author hluan
//session_start();
class icode
{
function __construct(){
header('Content-Type:image/png');
}
function __destruct(){
imagedestroy($png);
}
function getcode($len,$type){
switch ($type){
case 1;
$str = "1234567890";
break;
case 2;
$str = "abcdefghijklmnopqrstuvwxyz";
break;
case 0;
$str = "1234567890abcdefghijklmnopqrstuvwxyz";
break;
}
$result = "";
$length = strlen($str) - 1;
$num = 0;
for ($i=0;$i<$len;$i++){
$num = rand(0,$length);
$a = $str[$num];
$result = $result.$a;
}
/*Before using it,you should use session_start()*/
$_SESSION['icode'] = $result;//Store in session.
//echo "session:".$_SESSION['icode'];
//die();
$png = imagecreate(60,30);
$white = imagecolorallocate($png,255,255,255);//background
$red = imagecolorallocate($png,255,0,0);
$blue = imagecolorallocate($png,0,0,255);
$brown = imagecolorallocate($png,100,0,0);
$black = imagecolorallocate($png,0,0,0);//Identifying Code
imagefill($png,0,0,$white);
$k = rand(0,3);
if (0 == $k){
for ($n=0;$n<60;$n++){
$y = 15*sin($n/30*pi());
imagesetpixel($png,$n,15+$y,$red);
}
}else if (1 == $k){
for ($n=0;$n<60;$n++){
$y = 15*cos($n/60*pi());
imagesetpixel($png,$n,15+$y,$red);
}
}else if (2 == $k){
for ($n=0;$n<60;$n++){
$y = 15*sin($n/45*pi());
imagesetpixel($png,$n,15+$y,$brown);
}
}else if (3 == $k){
for ($n=0;$n<60;$n++){
$y = 15*cos($n/30*pi());
imagesetpixel($png,$n,15+$y,$brown);
}
}
for ($k=0;$k<10;$k++){
$i = rand(3,60);//width
$j = rand(3,15);//height
imageline($png,$i-3,$j-3,$i,$j,$black);
}
imagestring($png,5,3,5,$result,$blue);
$icode = imagepng($png);
return $icode;
}
}
/*测试代码
$icode = new icode();
$icp = $icode->getcode(6,0);
echo $icp;
*/
一.正则表达式
1.匹配符
1)头匹配符"^":如^0754,只匹配开头为0754的字符串
2)尾匹配符"$":如0754$,只匹配结尾为0754的字符串
3)全字匹配:将^和$结合,如^0754$,匹配0754字符串
2.转义字符
1)空字符:
换行\n
回车\r
制表符\t
2)其他字符:
"$" \$
"^" \^
"+" \+
"/" \/
3.通配符
1)*号:用来匹配前面一个字符是否在字符串中出现零次或多次.
例1:'abc*',匹配含有ab的所有字符串。
2)+号:......................................一次或多次.
例2:'abc+',匹配含有abc的所有字符串。
3)?号:......................................零次或一次.
例3:只匹配含有ab、abc结尾不再含c的字符串。如abca,aabc,aaab都可以,但abcc就不行。
4.关于转义字符\$与双、单引号(php4环境)
1)正则表达式本身就是一个字符串。
2)当引号中含有$时,用双、单引号定义就有区别,区别如下:
(1)使用单引号定义时,解释器会把引号内所有字符(包括$在内)都原封不动的赋值给字符串变量。
(2)使用双引号定义时,解释器会把引号内"$"字符以及其后的合法字符(字母、数字、下划线)翻译成变量,直到遇到一个非法字符才认为变量名结束,该非法字符及其后面的字符都被视为一般字符赋给字符串变量,直到遇到下一个"$"为止。
(3)注意:单个$出现在双引号的尾部,并且其后面不再有任何字符的时候,解释器不会将其翻译成变量。也不需要加转义\,当然不提倡。
(4)如果待匹配的字符中本身就有$,就无法用双引号来定义这个正则表达式,原因是转义字符\$在单,双引号中表示的意义不同:
<1>双引号中,\$和单个的$意义是一样的,都是代表尾匹配符,因此c\$$=c\$=c\$\$=c$=c\$\$;双引号中,\$在任何时刻都只代表一个字符"$",echo "c\$$"结果是c$$,并且\$和单个的$(单个的$是指该$无法和其后字符组成变量名)是完全等效的,都是尾匹配符,所以双引号中是无法写入作为非尾匹配字符的字符"$"的,也正是这个原因,大多数需要匹配$时定义正则表达式只能用''。
<2>单引号中,\$的意义仅仅表示字符"$",尾匹配符是$,不管后面是否有合法变量名字符;单引号中,\$其实是两个字符,如不用于正则匹配将没有任何意义,echo 'c\$$'结果仍是c\$$。单作为正则表达式来使用,单引号中的\$表示的是特殊字符"$",而尾匹配符就是单独的$字符。
3)正则表达式的尾匹配符"$"和变量的定义符是相同的:
例1:定义正则表达式为^ab$:$pattern="^ab\$";转义字符\$在双引号中就表示字符$,结果是^ab$。
例2:如上题,使用$pattern="^ab$";显然是错误的,但是由于$在尾部,后面没有其他字符,所以依然适用。
例3:以字符组合c$结尾的正则表达式:$pattern='c\$$';
例4:如上题,$pattern="c\$$";正则表达式将\$视为尾匹配符,故只匹配以c结尾
5."[]"方括号(字符簇)用法
1)[]匹配一个字符,在[]中使用^开头表示取非,即其后的字符全部是不匹配的。
例1:[a-zA-Z0-9]匹配所有大小写字母和数字。
例2:[\n\t\r\f]匹配所有空字符。
例3:[^A-Z]不匹配大写字母。
例4:^[^0-9]匹配不以数字开头的字符或字符串
2)特殊字符"."(句点)匹配除了"新行"之外的所有字符,模式^.abc$匹配任何以abc结尾的字符,但是不能匹配其本身。模式"."则可以匹配任何字符串,除了空字符串和只有一个"新行"字符的字符串。
例1:'^.abc$';匹配所有尾部含有abc的字符串,不匹配小数(新行),当不匹配abc。
例2:'.';匹配所有字符串,但不匹配空值。
例3:'.abc';匹配所有含abc的字符串,小数等等都可以,前提是不以abc为首,不匹配abc。
例4:'.abc$';匹配所有以abc结尾的字符串,任何小数等等都可以,不匹配abc。
3)php提供了内置通用字符簇:
[[:alpha:]]任何字母
[[:digit:]]任何数字
[[:alnum:]]任何字母和数字
[[:space:]]任何空白字符
[[:upper:]]任何大写字母
[[:lower:]]任何小写字母
[[:punct:]]任何表点符号
[[:xdigit:]]任何十六进制数字
[[:cntrl:]]任何ASCII值小于32的字符
注意:以上字符簇有个特点,只要被匹配的字符或字符串中有此字符,即匹配正确,不管字符串是以什么方式组成的。
6."{}"大括号用法
1)方括号只能匹配一个字符,而匹配多个字符只能用{}实现:{}用来确定前面内容出现的次数。{n}表示出现n次;{m,n}表示出现m~n次,包括m和n次;{n,}表示出现n次或者n次以上。
例1:^a{10}$;匹配aaaaaaaaaa。
例2:[0-9]{1,}$;匹配所有>0的数。
2)"{}"与通配符之间的关系
? 相当于 {0,1} 零次或一次
* ..... {0,} 零次或无数次
+ ..... {1,} 一次或无数次
7."()"用法
圆括号"()"括住的pattern表示子模式,如$pattern='([1-9]{1}[0-9]{3})-([0-1]{1}[1-2]{1})-([0-3]{1}([0-9]|))';()扩住的就是一个个子模式,()相当于把他们独立起来,分别匹配而相互不干扰。
二.POSIX风格正则表达式函数
1.ereg
ereg(pattern,string,[array $regs]);
eregi(pattern,string,[array $regs]);
ereg函数在string中找到满足pattern模式的文本,如果找到true,没找到false。如果有第三个参数$regs,那找到的文本将放在$regs[0]中,并且regs数组中将一次存放各个圆括号表达的子模式匹配的结果。$regs[1]中存放了第一个子模式所匹配的结果,$regs[2]中是第二个,顺序从左到右,依次类推。如果没有找到匹配的文本,$regs数组的值不会被改变。
注意:如果找到了匹配的文本,不管找到的子模式是多少个>9还是<9,ereg()只会改变$regs数组前10个元素的值。但是这不会影响函数对子模式组合的匹配结果。ereg总是先匹配完,如果没发现匹配的文本就false,发现了就true。如果有子模式,会逐步根据这些子模式重新在字符串中寻找匹配的文本,直到$regs数组被填满10个元素或者所有子模式被匹配完,如果子模式少于10则剩余的$regs将被赋空值。总之一句话,匹配归匹配,$regs归$regs,$regs只有10个值。
eregi()函数与ereg()基本用法相同,只是eregi对大小写不敏感。
2.ereg_replace和eregi_replace
ereg_replace(pattern,string replacement,string)
eregi_replace(pattern,string replacement,string)
string字串中满足pattern的文本将被替换成replacement。如果string中有pattern匹配的文本,那么返回替换之后的值,如果没有,则返回原来的string值。
如果pattern中包含子模式,子模式可以有选择的被保留而不被替换。
例1:pattern中的第二个子模式不被替换,replacement可写成这样:replacement\\2。这样string中匹配的pattern的字符串将被替换为replacement+pattern2,pattern2表示匹配pattern的文本中又匹配pattern的第二个子模式的文本。如果使用"\\0"表示保留整个匹配文本。利用这个特性可以实现在特定的字符串之后插入文本的操作。
replacement必须是字符串类型变量,如果不是,替换时将强制转换成字符串类型。
3.split()函数和spliti()函数用法
split(pattern,string,[int limit]);
spliti(pattern,string,[int limit]);
split以正则表达式pattern定义的模式为分隔符将string分隔成几个部分。如果分隔成功,返回的值为各个分隔后部分组成的数组,失败则返回false。可选limit表示最大分割块数。如果limit为5,那么即使string有>5个的地方符合pattern,string也只被分割为5个部分,最后一个部分是string去掉前四个部分后剩下的部分。返回值中也只有5个元素。
三.perl风格正则表达式及相关函数
1.perl正则语法
perl分隔符,可使用"/","!"和"{}"。
例1:/^[^0-9]/ !^[0-9]! {^[0-9]}三个都一样。
在分隔符内部,分隔字符本身就是一个特殊敏感字符,要进行转义。如果用分隔符"/",正则中又用了表达字符的"/",则必须要用"\/"。如果混合用"/"和"!"就没问题。
例2:/\/\/$/ !//$! 两者也相同
例3:!^\!\![0-9]$! /^!![0-9]$/ 两者也相同
2.perl特殊意义字符
\a ASCII值为7的告警符
\b 词的边界
\A 和脱出符号("/")等价
\B 非词边界
\cn 控制字符
\d 单个数字
\D 单个非数字
\s 单个空白
\S 单个非空白
\w 单个的字母或下划线
\W 单个的非词字符(不是字母也不是下划线)
\Z 从目标字串的尾部开始匹配
3.高级特性
1)或运算"|":
例如!^ex|em!匹配条件是ex或em开头的字符串,还可以写成!^e(x|m)!。
注意:()内的内容代表子模式\
2)逻辑符号后面的模式选项
!正则表达式!逻辑选项
A:只匹配位于目标字串开头的字符。
E:该选项使转义字符$构成的正则表达式只匹配目标字符串的结尾字符。如果选择m选项,该选项就被忽略。
U:该选项禁止最大长度的搜索。一般情况下,搜索会尽量找最长的匹配字符串。例如模式/a+/在"caaaaab"字符串中的匹配结果是"aaaaa",但是使用该选项的模式/a+/U匹配的结果会是"a"。
S:对模式进行学习,提高查找速度。
i:该选项忽略大小写。
m:该选项将含有换行符的字符串视为多行而不是一行。这个时候"$","^"等字符会匹配每个换行符。
s:该选项使句点"."也匹配换行符。
x:该选项通知PHP解释器在分析的时候忽略正则表达式定义中的非转义空格符。这样可以在正则表达式中使用空格来增强其可读性,但这时在表达式中使用空格符必须使用转义字符。
3)扩展模式符号。
(?#comment) 添加注释comment,可以增强正则可读性。
(?=pattern) 指定在模式之后必须跟随值pattern。
(?!pattern) 指定在模式之后不能跟随值pattern。
(?n) 在模式内部而非结尾处定义模式选项n。
(?: ) 消耗字符,不捕获匹配结果。
例:echo ereg("?:^a$","a");//无任何输出
相关文章
- 以前我们开发大型项目时都会用到svn来同步,因为开发产品的人过多,所以我们会利用软件来管理,今天发有一居然可以利用php来管理svn哦,好了看看吧。 代码如下 ...2016-11-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 最基础的对数据的增加删除修改操作实例,菜鸟们收了吧...2013-09-26
- 这篇文章主要介绍了解决Mybatis 大数据量的批量insert问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-09
Antd-vue Table组件添加Click事件,实现点击某行数据教程
这篇文章主要介绍了Antd-vue Table组件添加Click事件,实现点击某行数据教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-17- 这篇文章主要介绍了详解如何清理redis集群的所有数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-18
- 这篇文章主要介绍了vue 获取到数据但却渲染不到页面上的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-19
- 在php中解析xml文档用专门的函数domdocument来处理,把json在php中也有相关的处理函数,我们要把数据xml 数据存到一个数据再用json_encode直接换成json数据就OK了。...2016-11-25
- 这篇文章主要介绍了mybatis-plus 处理大数据插入太慢的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-18
- 这篇文章介绍了在C#中对config文件的操作,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了python自动化办公操作PPT的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-05
- 这篇文章主要介绍了postgresql数据添加两个字段联合唯一的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-04
Vue生命周期activated之返回上一页不重新请求数据操作
这篇文章主要介绍了Vue生命周期activated之返回上一页不重新请求数据操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-26- 这篇文章主要介绍了c# socket网络编程,server端接收,client端发送数据,大家参考使用吧...2020-06-25
- 这篇文章主要介绍了解决vue watch数据的方法被调用了两次的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-11-07
nodejs文件操作模块FS(File System)常用函数简明总结
件系统操作相关的函数挺多的。首先可以分为两大类。一类是异步+回调的。 一类是同步的。在这里只对异步的进行整理,同步的只需要在函数名称后面加上Sync即可1. 首先是一类最常规的读写函数,函数名称和形式,应该是起源于C...2014-06-07- 这篇文章主要介绍了vue 数据(data)赋值问题的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-29
- 这篇文章主要介绍了Python3 常用数据标准化方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-24
- 这篇文章主要介绍了C#模拟window操作鼠标的方法,可实现模拟鼠标移动到固定位置后点击右键的功能,涉及鼠标常用事件的操作技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了微信小程序手势操作之单触摸点与多触摸点的相关资料,需要的朋友可以参考下...2017-03-13