PHP+Access数据库操作类

<?php
 --------------------------------------------------------------------
 //使用范例:
 //$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
 {
 $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;
 }
 }
 ?>

Discuz!7.0.0随机用户名发布接口正式发布,带附件和分类信息发布功能

  1. 功能简介:免登陆,随机多用户完美模拟发布时间,发布主题发布回复,帖子标签帖子分类,任意格式附件
  2. 使用之前,请你仔细阅读以下使用说明和注意事项:
    1. 参数列表:fid=[分类ID],username=[发贴用户名],subject=[标题],tags=[标签],message=[内容],attachments=[附件]
    2. 发贴用户名可以通过采集实现,常用的就是作者标签,接口会检查用户是否存在,并注册;你也可以用模块中内置的随机用户名功能产生用户名
    3. Tag标签,请用空格或者|||分隔开
    4. 内容默认过滤了回车和换行以外的其它HTML标记,所以,请你使用UBB模式发布。
    5. 论坛启用HTML代码的操作过程:版块编辑->启用HTML功能;用户组权限编辑->HTML发布权限;发贴时请自带参数 htmlon=1
    6. 附件支持多种格式,为了精确,你可以在下面设定附件的后缀,附件支持相对和决对路径
  3. 安装说明:为保护程序安全性和用户利益,收费版的接口将采用ZendGuard加密和域名绑定技术,这要求你的论坛空间支持PHP5和Zend Optimizer及以上版本
  4. 购买方式:本版售价150,含发布接口,发布模块,测试规则,并提供最好的技术支持和持续的升级服务!此接口免费版,你可以在论坛免费下载到,下载地址:http://bbs.locoy.com/spider-33751-1-1.html。

以下是产品截图,图片效果在FireFox下会更加绚丽:

使用zend_guard对PHP代码进行加密,视频教程

如果您在寻找Zend的授权或者注册码,请到这里http://www.4wei.cn/archives/1000433。

zend guard 4/5 破解版和免过期办法,已补授权Key一枚,成功注册。

1.什么是Zend Guard?

Zend Guard是PHP市场上第一个保护PHP知识产权的代码加密解决方案和电子许可管理方案。Zend Guard通过原始代码加密以及限制分发没有授权的软件来实现软件的最大化收益。

2.Zend Guard的系统需求

支持的操作系统:

Linux x86

Windows x86 2000 / XP / 2003 / Vista (仅支持32位)

Mac OS X 10.4, 10.5

支持的PHP版本:

4.2.x 到5.2.x

php程序员站 继续阅读使用zend_guard对PHP代码进行加密,视频教程

Discuz!7.0.0正式版,随机用户名发贴版正式发布

----------------------------------------
2009年03月15日,Discuz!Uch1.5日志发布接口正式发布,详情点击

主要功能:

随机用户名功能:随机用户发贴,随机用户回帖
完善的时间处理:发帖时间按回帖总数根据间隔时间倒推,完美模拟正常发布时间;
完善的随机数据:帖子浏览量随机,下载数量随机,用户IP随机,匿名游客随机;
完善的内容功能:帖子内容支持HTML代码,支持UBB,支持TAG标签,支持HTMLON
强大的附件识别:任意格式的附件识别功能,支持图片附件和非图片附件,准确提取附件文件名和后缀,让附件图标也完美对应格式显示,支持随机生成下载数量,且支持自定义附件识别函数,下载附件更加方便。
完善的模型支持:支持主题分类,支持分类信息模型
安全的接口程序:根据原入库代码编写,不修改和删除数据库信息,完美更新数据,安全快速
强大的售后支持:官方信誉,请放心购买,程序安全,请放心使用,全程指导直到发布成功。

购买说明:

此接口为尘缘个人学习和研究PHP程序所开发,非火车采集器官方开发,免费发布给大家使用,对于使用此接口可能造成的错误和损失,我与火车采集器官方均不承担相关责任。
如果你需要尘缘提供技术支持等服务,需要支付偶服务费用RMB150元,包含技术服务、接口一份、规则和模块各一,带有售后和插件升级(Discuz!7以内),可优惠订做相关采集规则和个性功能。

QQ:130775 ,http://4wei.cn,演示网站:http://www.sootop.com/forumdisplay.php?fid=8
祝大家新年快快乐乐,长长久久。
以下是免费版接口的使用和更新说明,请你一定要仔细读到尾,祝你能用得开心!

更新日志:

2009-02-25更新说明:收费版加强了用户注册的处理,增加了UTF-8版本的支持;
2009-02-24更新说明:收费版增加了对2009版的本地附件模拟上传的支持;
2009-01-24更新说明:取消了对帖子内容长度的限制,可以直接发布大量回复;
2009-01-08更新说明:修正了两处可能产生重大问题的函数,请大家务必更新;
2009-01-05更新说明:修复了主题分类发布,修复了发布回复以后浏览量等于回复量的问题,加入随机回复功能;

使用方法:

视频教程:Discuz!7.0.0接口的使用教程地址:http://bbs.locoy.com/spider-38482-1-1.html
打开Locoy.php,仔细阅读相关说明,配置相关默认值,然后上传文件到你的论坛根目录.
导入Discuz7.0.0模块
创建Web发布配置,CMS路径填写为你的论坛(网站)根目录
需要修改Locoy.php文件名的用户,需要修改模块中的获取列表地址和发布地址
导入附带的规则,编辑->选择发布版块
运行任务进行采集和发布即可
本接口可以采集一个发贴用户名,可以通过在模块中配置随机用户名

相关发布效果图:

可视化编辑页面效果

发布状态

发布测试帖效果

发布完成效果

使用教程:http://www.4wei.cn/?p=331

下载地址:http://bbs.locoy.com/spider-33751-1-1.html

PHP代码优化,40条最重要的方法

40 Tips for optimizing your php Code
原文地址:http://reinholdweber.com/?p=3
英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。 继续阅读PHP代码优化,40条最重要的方法

php连接access时的分页处理办法,比较恼火.

<?php
--------------------------------------------------------------------
//FileName:class.php
//Summary: Access数据库操作类
//Author:  forest
//CreateTime: 2006-8-10
//LastModifed:
//copyright (c)2006
//http://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;$iquery($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;
    }
     }
?>

PHP不能连接Sqlite3的解决办法

火车采集器2008的商业版中,采用了Sqlite3做为默认数据库格式,以期待存放大型数据的需求.

目前,PHP5.3以前的版本还不能直接支持Sqlite3,即不支持DB3后缀的Sqlite数据库文件.

使用PHP连接Sqlite3时会报错,以下为一个解决办法:

If you get an error message:

Warning: sqlite_open() [function.sqlite-open]: file is encrypted or is not a database

then most probably your code is accessing a SQLite3 database.

sqlite_open() only supports SQLite2. Use PDO to access SQLite3.

目前找到的解决办法是使用PDO即可连接Sqlite3.

这里也回忆了一下PDO和ADOdb各是什么东东.
PDO和ADOdb均是数据库抽象层.总的功能是可以实现连接多个数据库,特别适合一个程序中实现多个数据库.
PDO支持数据库移植,如果你的部署将来有多种数据库,那就用它了.同时,PDO是C设计的,执行效率较高.他已经封装为PHP的扩展库组件了.运行快,效率高,我总结吧,还要安全一些,可以防SQL注入,初学,不知道有没有错.
ADOdb是PHP类,是一个PHP文件,相对PDO来讲,运行效率较低,但支持性也较广泛,使用起来也简单方便.

据说Adodb也支持Sqlite,不过,ADOdb也是基于PHP的组件,那么肯定也不支持SQLite3了,所以PDO是解决这个问题的唯一办法.
当然,使用php5.3或者更高版本可以直接解决问题。

这里,表示一下茫然,Sqlite3出了有四年了吧,PHP5干什么吃的去了?

然后记下PDO的下载地址,以及PDO与SQLite的连接方法:

PDO下载地址:http://pecl.php.net/package/pdo
PDO_Sqlite 函数及语法:http://cn.php.net/manual/en/ref.pdo-sqlite.php

下载以后并行安装就可以了,PHP5.1已经内置了PDO的相关组件,我们要做的就是打开PHP.ini把PDO和PDO_sqlite启用了

extension=php_pdo.dll
extension=php_pdo_sqlite.dll

启用PDO和PDO_dqlite以后,我就开始写一段测试代码,拷了一个任务数据库到程序目录中以备测试.

<?
$dbh = new PDO('sqlite:spiderresult.db');
if ($dbh){
echo 'OK';
}else{
echo 'Err';
}

foreach ($dbh->query('SELECT id FROM content limit 10;') as $row)
{
echo $row[0];
}
?>

PHP读取目录树,文件名的一个类:Directory Reader Object

在国内论坛上找了很久也没有找到,一般都是读取一个目录下的文件列表,后来到国外的一个网站找到了这个类,写得不错,备忘·
可以读取目录下的目录,文件等。
继续阅读PHP读取目录树,文件名的一个类:Directory Reader Object

[2009-06-14更新]Modoer内容采集程序,准确快速方便的Modoer内容解决方案

网站建设核心在运营模式,基础在内容建设。

我们提供的内容采集方案可以为你解决以下几个难题:

一,采集软件化,解决人手少,每天更新数据少,手工发布内容难度大,重复率高,效率低的问题
二,过程自动化,批量化数据更新,你仅需要在后台做一些简单的修改和整理,你可以花更多的时间在改进用户体验上
三,模拟原创化,每日自动发布信息,创造多用户同时在线气氛,搜索引擎优化 继续阅读[2009-06-14更新]Modoer内容采集程序,准确快速方便的Modoer内容解决方案

Zend Studio For Eclipse 6.0/6.0.1 发布(含注册码)

DEDE的高级使用,需要一个比较理想的PHP开发环境,以前老用 Dreamweaver,但他只是一个完美的代码和 HTML 编辑器,在 PHP 开发方面,他连基本的自定义函数的参数都无法提示;有人推荐 EditPlus,不过他也只是个编辑器,离“开发环境”还差得远;再者就是 Zend Studio,他是公认的很好很强大的 PHP 开发环境,不过看到他那丑陋的界面,我就知道那不是我想要的。

后来知道了有个 PDT,基于 Eclipse 的 PHP 开发环境,用了一下,着实不错,界面也很美观,基本的 PHP 开发功能也够用,下定决心,从此就用他来搞 PHP 了。

过年期间,看到一条新闻,新版的 Zend Studio 发布了,该版本是基于 Eclipse 的开发环境,是在 PDT 的基础之上开发的,迫不及待地下载安装试用,WOW,一切都是那么的完美,毫无疑问,Zend Studio For Eclipse 将是以后 PHP 开发的不二选择了!

今天去Zend官网,看到有 6.0.1的下载版了,于是记录下来.到目前没止,还没有中文版或者插件.

继续阅读Zend Studio For Eclipse 6.0/6.0.1 发布(含注册码)

一个DEDE下载页面的函数,动态显示所有一级栏目名


//以下为获取栏目列表,By 尘缘
$dsql = new DedeSql(false);
$menuquerysql = "Select typedir,typename from `#@__arctype` where reid='0'";
$dsql->Execute('me',$menuquerysql);
while($row = $dsql->getarray())
{
$menus= $menus."

  • ".$row['typename']."
  • \r\n";
    }
    $dsql->Close();

  • 将以上代码加到plus/download.php中,位置任意,在模板中调用< ?=menus?>即可.
    这里主要是分析了DEDE的Mysql函数,感觉好用。
    记号一下。
    继续阅读一个DEDE下载页面的函数,动态显示所有一级栏目名

    DEDECMS 删除文章时删除缩图和内容中大图

    打开dede/inc/inc_batchup.php找到"//删除数据库的内容"
    在这前面加上

    //删除缩略图
    if($arcRow['litpic']!=""){
    $dsql->ExecuteNoneQuery("Delete From #@__uploads where url='$arcRow[litpic]'");
    $truedir = GetTruePath($arcRow['siterefer'],$arcRow['sitepath']);
    $litpicfile = $truedir.$arcRow['litpic'];
    @unlink($litpicfile);
    }
    //删除大图
    $arcbodyQuery = "Select * from ".$arcRow['addtable']." where aid='$aid'";
    $arcbodyRow = $dsql->GetOne($arcbodyQuery);
    $imgsrcarray=GetImageSrc($arcbodyRow['body']);
    foreach ($imgsrcarray as $v) {
    if((trim($v)!="")&&(!eregi("^http://",$v))){
    $dsql->ExecuteNoneQuery("Delete From #@__uploads where url='$v'");
    $picfile = $truedir.$v;
    @unlink($picfile);
    }
    }

    //删除数据库的内容

    第二处:
    找到
    Select #@__archives.ID,#@__archives.title,#@__archives.typeid
    改为:
    Select #@__archives.ID,#@__archives.title,#@__archives.typeid,#@__archives.litpic

    第三处:
    在文件最后加上一函数
    //获得内容中的图像地址
    function GetImageSrc($body){
    if( !isset($body)) return '';
    else{
    preg_match_all ("/<(img|IMG)(.*)(src|SRC)=[\"|'|]{0,}([h|\/].*(jpg|JPG|gif|GIF))[\"|'|\s]{0,}/isU",$body,$out);
    return $out[4];
    }
    }

    PHP正则表达式使用详解

    一个正则表达式是一个特定的格式化模式,可以用来找出一个字符串在另一个字符串中的使用情况。几个编程语言,包括Visual Basic,Perl,JavaScript和PHP都支持正则表达式,希望在这篇入门指导的结束,Mitchell(作者自己)可以让你在PHP程序中能应用一些基本的正则表达式。正则表达式是在各种各样的程序语言中突出的古怪特征中的一种,但是由于它们看起来是很难的一个概念,所以很多开发者就把它们放到了角落里,忘记了它们的存在。

    让我们先来看看什么是正则表达式,为什么你要在PHP程序中用到它们。

    什么是正则表达式?

    你对从一个不错的老的基于控制的文本编辑器中分离出像BBEdit和notepad的程序,有什么看法呢?两个都支持文本输入,可以让你保存文本到文件中,但是现在的文本编辑器也支持其它功能,包括查找–代替工具,这让编辑一个文本文件相当容易。
          正则表达式也是相似的,只是更好一些。正则表达式可以被认为一个极其高级的查找-替换工具,让我们从痛苦中摆脱出来:不必再写定制的数据确认例子来检查电子邮件地址或者来确认电话号码的格式是正确的,如此等等。
          任何程序中最普通的函数之一就是数据有效性检查,PHP捆绑了一些文本检查函数,允许我们用正则表达式匹配一个字符串,确认有一个空格,有一个问号,等等。
          你不知道的可能是,正则表达式可以简单装备吗,当你掌握了一些正则表达式时(这个正则表达式可以用来告诉正则表达式引擎一个字符串中我们想要匹配的部分),你会自问为什么会把正则表达式扔到角落里这么久,^_^。
          PHP有两套函数,用来处理两种类型的正则表达式:Perl5兼容模式,和Posix标准兼容模式。在这篇文章中我们将看看ereg函数,用遵照Posix标准的搜索表达式工作。虽然它们并没有Perl5模式那样强大,但是一种不错的学习正则表达式的方法。如果你对PHP支持的Perl5兼容正则表达式感兴趣,可以到PHP.net网站找一些关于preg函数的细节。
          PHP有六个函数来处理正则表达式,它们都把一个正则表达式作为它们的第一个参数,列出如下:

    ereg: 最常用的正则表达式函数, ereg 允许我们搜索跟一个正则表达式匹配的一个字符串.
    ereg_replace: 允许我们搜索跟正则表达式匹配的一个字符串,并用新的字符串代替所有这个表达式出现的地方。
    eregi: 和ereg几乎是一样效果,不过忽略大小写。
    eregi_replace: 和ereg_replace有着一样的搜索-替换功能,不过忽略大小写.
    split: 允许我们搜索和正则表达式匹配的字符串,并且以字符串集合的方式返回匹配结果.
    spliti: split函数忽略大小写的版本.
    为什么使用正则表达式?

            如果你不断地建立不同的函数来检查或者操作字符串的一部分,现在你可能要放弃所有的这些函数,取而代之的用正则表达式。如果你对下列的问题都答“是的”,那么你肯定要考虑使用正则表达式了:

    你是否正在写一些定制的函数来检查表单数据(比如在电子信箱地址中的一个@,一个点)?
    你是否写一些定制的函数,在一个字符串中循环每个字符,如果这个字符匹配了一个特定特征(比如它是大写的,或者它是一个空格),那么就替换它?
           除了是令人不舒服的字符串检查和操作方法,如果没有有效率地写代码,上述的两条也会使你的程序慢下来。你是否更倾向于用下面的代码检查一个电子信箱地址呢:

    <?php
    function validateEmail($email)
    {
           $hasAtSymbol = strpos($email, "@");
           $hasDot = strpos($email, ".");
           if($hasAtSymbol && $hasDot)
              return true;
           else
              return false;
    }
    echo validateEmail("mitchell@devarticles.com");
    ?>
    ... 或者使用下面的代码:

    <?php
    function validateEmail($email)
    {
         return ereg("^[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+$", $email);
    }
    echo validateEmail("mitchell@devarticles.com");
    ?>

         可以肯定的是,第一个函数比较容易,而且看起来结构也不错。但是如果我们用上面的下一个版本的email地址检查函数不是更容易吗?

         上面展示的第二个函数只用了正则表达式,包括了对ereg函数的一个调用。Ereg 函数返回true或者false,来声明它的字符串参数是否和正则表达式相匹配。

    很多编程者避开正则表达式,只因为它们(在一些情况下)比其它的文本处理方法更慢。正则表达式可能慢的原因是因为它们涉及把字符串在内存中拷贝和粘贴,因为正则表达式的每一个新的部分都对应匹配一个字符串。但是,从我对正则表达式的经验来说,除非你在文本中几百个行运行一个复杂的正则表达式,否则性能上的缺陷都可以忽略不计,当把正则表达式作为输入数据检查工具时,也很少出现这种情况。

    正则表达式语法
    在你可以匹配一个字符串到正则表达式之前,你必须先建立正则表达式。开始的时候,正则表达式的语法有点古怪,表达式中的每一个短语代表某个类型的搜索特征。下列是一些最普通的正则表达式,也都对应着一个如何使用它的例子:

    字符串头部
    搜索一个字符串的头部,用^,例如

    <?php echo ereg("^hello", "hello world!"); ?>
    将返回 true, 但是
    <?php echo ereg("^hello", "i say hello world"); ?>
    将返回 false, 因为hello不在字符串”I say hello world”的头部。
    字符串尾部

    搜索字符串尾部,用$,例如:
    <?php echo ereg("bye$", "goodbye"); ?>
    将返回true, 但是
    <?php echo ereg("bye$", "goodbye my friend"); ?>
    将返回 false,因为bye不在字符串”goodbye my friend”的尾部.

    任意的单个字符
    搜索任意字符,用点(.),例如:
    <?php echo ereg(".", "cat"); ?>
    将返回true,但是
    <?php echo ereg(".", ""); ?>
    将返回false,因为我们的要搜索字符串没有包含字符。你可以用花括号随意告诉正则表达式引擎它要匹配多少个单个字符。如果我只想匹配5个字符,我可以这样用ereg:
    <?php echo ereg(".{5}$", "12345"); ?>
    上面的这段代码告诉正则表达式引擎当且仅当至少5个连续的字符出现字符串的尾部时返回true.我们也可以限制连续出现的字符的数目:
    <?php echo ereg("a{1,3}$", "aaa"); ?>
    在上面的例子里,我们已经告诉正则表达式引擎,我们的搜索字符串来匹配表达式,它在尾部必须有介于1和3个的”a”字符。
    <?php echo ereg("a{1,3}$", "aaab"); ?>
    上面的例子将不会返回true,虽然有三个”a”字符在搜索字符串里,但是它们不是在字符串的尾部。如果我们把结尾字符串匹配$从正则表达式中去掉,那么这个字符串是匹配的。
    我们也可以告诉正则表达式引擎来匹配至少有确定数目的字符在一行,如果它们存在的,可以匹配更多。 我们可以这样做:
    <?php echo ereg("a{3,}$", "aaaa"); ?>

    零或多次重复字符
    为了告诉正则表达式引擎一个字符可能存在,也可以重复,我们用*字符。这里的两个例子都将返回true.

    <?php echo ereg("t*", "tom"); ?>
    <?php echo ereg("t*", "fom"); ?>
    即使第二个例子不包含”t”这个字符,但仍旧返回ture,因为*表示字符可以出现,但不是必须出现。事实上,任何普通的字符串模式都会使上面的ereg调用返回true,因为’t’字符是可选的.

    一或多次重复字符
    为了告诉正则表达式引擎一个字符必须存在,也可以重复不止一次,我们用+字符,像

    <?php echo ereg("z+", "i like the zoo"); ?>
    下面的例子也会返回true:
    <?php echo ereg("z+", "i like the zzzzzzoo!"); ?>

    零或一次重复字符
    我们也可以告诉正则表达式引擎,一个字符必须是或者只存在一次,或者没有。我们用?字符来做这项工作,就像
    <?php echo ereg("c?", "cats are fuzzy"); ?>
    如果我们愿意,我们完全可以从上面的搜索字符串中删除’c’,这个表达式会仍旧返回true.’?’ 的意思是一个’c’可以出现在搜索字符串的任何地方,但不是必须的。

    正则表达式语法 (续)
    空格字符
    为了匹配一个搜索字符串中的空格字符,我们用预定义Posix的类,[[:space]].方括号标明连续字符的相关性,”:space:”是实际要匹配的类(在这种情形下,是任何空白字符)。空白包括tab字符,新行字符,空白字符。或者,如果搜索字符串必须包含只有一个空格,而不是一个tab或者新行字符,你可以用一个空格字符(" ")。在大多数情况下,我倾向于使用":space:",因为这意味着我的意图不仅仅是单个空格字符,这点很容易被忽视。这里有一些Posix-标准预定义类,
    有一些我们可以作为正则表达式的部分的一些Posix-标准预定义类,包括[:alnum:], [:digit:], [:lower:]等等。 完整的列表可以在这里查看

    我们可以像这样匹配单个空白字符:

    <?php echo ereg("Mitchell[[:space:]]Harper", "Mitchell Harper"); ?>
    我们也可以通过在表达式后用?字符来告诉正则表达式引擎匹配没有空白或者一个空白。
    <?php echo ereg("Mitchell[[:space:]]?Harper", "MitchellHarper"); ?>

    模式分组
    相关的模式可以在方括号里分在一起。很容易用[a-z]和[A-Z]指定只有一个小写字母或者一列大写字母以搜索字符串的一部分存在。
    <?php
    // 要求从第一个到最后一个都是小写字母
    echo ereg("^[a-z]+$", "johndoe"); // 返回true
    ?>
    或者像
    <?php
    // 要求从第一个到最后一个都是大写字母
    ereg("^[A-Z]+$", "JOHNDOE"); // 返回 true?
    ?>
    我们也可以告诉正则表达式引擎,我们希望或者是小写字母,或者是大写字母。我们只要把[a-z]和[A-Z]模式结合在一起就可以做到。
    <?php echo ereg("^[a-zA-Z]+$", "JohnDoe"); ?>
    在上面的例子里,如果我们能匹配"John Doe",而不是"JohnDoe",将是非常有意义的。我们用下面的正则表达式来做这个:
    ^[a-zA-Z]+[[:space:]]{1}[a-zA-Z]+$
    很容易搜索一个数字字符串
    <?php echo ereg("^[0-9]+$", "12345"); ?>

    词语分组
    不仅仅搜索模式可以分组,我们也可以用圆括号把相关的搜索词语进行分组。
    <?php echo ereg("^(John|Jane).+$", "John Doe"); ?>
    在上面的例子中,我们有一个字符串头部字符,紧跟着"John"或者"Jane",至少有一个其它字符,然后一个字符串尾部字符。所以…
    <?php echo ereg("^(John|Jane).+$", "Jane Doe"); ?>
    ...将也匹配我们的搜索模式

    特殊字符的情形
    因为一些字符要用在一个搜索模式的明确分组或者语法上,像在(John|Jane)中的圆括号,我们需要告诉正则表达式引擎来屏蔽这些字符,加工它们使之成为被搜索字符串的一部分,而不是搜索表达式的一部分。我们所用的方法称为“字符转义”,涉及到将任何“专用符号”加上反斜杠。所以,例如,如果我想在我的搜索中包含’|’,那么我就可以这样做
    <?php echo ereg("^[a-zA-z]+\|[a-zA-z]+$", "John|Jane"); ?>
    这里只是少量的一些你要转义的字符,你必须转义^, $, (, ), ., [, |, *, ?, +, \ and { 。
    希望你现在对正则表达式实际上有多么强大有了一点点感觉了。现在让我们看两个用正则表达式来检查数据中一个字符串的例子。

    正则表达式例子
    例子1
    让我们把第一个例子做的相当简单,检验一个标准的URL.一个标准的URL(没有端口号),有三个部分构成:

    [协议]://[域名]

    让我们从匹配URL的协议部分开始,并且让它只能用http或者ftp.我们可以用下面的正则表达式做到这点:

    ^(http|ftp)
    ^字符特指字符串的头部,利用圆括号把http和ftp围住,且用“或者”符号(|)将它们分开,我们告诉正则表达式引擎http和ftp两者之一必须在字符串的开头。

    一个域名通常由www.somesite.com构成,但是可以随意选择要不要www部分。为了例子简单,我们只允许.com,.net,和.org的域名是在考虑之中的。我们最好这样对正则表达式中的域名部分表示如下:
    (www\.)?.+\.(com|net|org)$
    把所有的东西放在一起,我们的正则表达式就可以用作检查一个域名,如:

    <?php
    function isValidDomain($domainName)
    {

    return ereg("^(http|ftp)://(www\.)?.+\.(com|net|org)$", $domainName);
    }
    //真(true)
    echo isValidDomain("http://www.somesite.com");
    //真(true)
    echo isValidDomain("ftp://somesite.com");
    //假 (false)
    echo isValidDomain("ftp://www.somesite.fr");
    //假 (false)
    echo isValidDomain("www.somesite.com");
    ?>

    例子二
    因为我居住在澳大利亚悉尼,让我们检查一个典型的澳大利亚国际电话号码。澳大利亚国际电话号码的格式如下:
    +61x xxxx-xxxx
    第一个x是区号,其它的都是电话号码。检查以'+61'开头且紧跟一个在2到9之间的区号的电话号码,我们用下面的正则表达式:

    ^\+61[2-9][[:space:]]
    注意,上面的搜索模式把'+'字符用'\'转义,以便于可以在搜索中包含,不至于被解释为一个正则表达式。[2-9]告诉正则表达式引擎我们需要包含一个2到9之间的数字。[[:space:]]类则告诉正则表达式期望在这里有一个空白。

    这里是电话号码剩下的搜索模式:
    [0-9]{4}-[0-9]{4}$
    这里没有什么不寻常的地方,我们只是告诉正则表达式引擎电话号码可用的数字,它必须是4个数字的组合,跟着一个连接符,再跟着另一个4个数字的组合,然后一个字符串尾部字符。
    把完整的正则表达式放在一起,放进一个函数,我们可以用代码来检查一些澳大利亚国际电话号码:
    <?php
    function isValidPhone($phoneNum)
    {
    echo ereg("^\+61[2-9][[:space:]][0-9]{4}-[0-9]{4}$", $phoneNum);
    }
    // 真(true)
    echo isValidPhone("+619 0000-0000");
    // 假(false)
    echo isValidPhone("+61 00000000");
    //假( false)
    echo isValidPhone("+611 00000000");
    ?>

    总结
    正则表达式用一些不适合书写和重复的代码来检查一个字符串。在最后的几页里,我们已经讲解了所有的Posix标准正则表达式的基础,包括字符,分组和PHP ereg函数。我们也知道了怎么用正则表达式来检查一些PHP中简单的字符串。

    MySQL 数据库函数库

    本函数库供存取 MySQL 数据库。有关 MySQL 的细节,及下载 MySQL 数据库,请到这个网址 http://www.mysql.com 。而网络上也有许多提供处理 MySQL 的用户界面程序,建议到 http://www.phpwizard.net/phpMyAdmin 下载 phpMyAdmin,可以使用浏览器操作及管理 MySQL。整套 phpMyAdmin 程序,是用 PHP3 完成的,亦可同时研究 PHP3 与 MySQL 的链接。

    mysql_affected_rows: 得到 MySQL 最后操作影响的列数目。
    mysql_close: 关闭 MySQL 服务器连接。
    mysql_connect: 打开 MySQL 服务器连接。
    mysql_create_db: 建立一个 MySQL 新数据库。
    mysql_data_seek: 移动内部返回指针。
    mysql_db_query: 送查询字符串 (query) 到 MySQL 数据库。
    mysql_drop_db: 移除数据库。
    mysql_errno: 返回错误信息代码。
    mysql_error: 返回错误信息。
    mysql_fetch_array: 返回数组资料。
    mysql_fetch_field: 取得字段信息。
    mysql_fetch_lengths: 返回单列各栏资料最大长度。
    mysql_fetch_object: 返回类资料。
    mysql_fetch_row: 返回单列的各字段。
    mysql_field_name: 返回指定字段的名称。
    mysql_field_seek: 配置指针到返回值的某字段。
    mysql_field_table: 获得目前字段的资料表 (table) 名称。
    mysql_field_type: 获得目前字段的类型。
    mysql_field_flags: 获得目前字段的标志。
    mysql_field_len: 获得目前字段的长度。
    mysql_free_result: 释放返回占用内存。
    mysql_insert_id: 返回最后一次使用 INSERT 指令的 ID。
    mysql_list_fields: 列出指定资料表的字段 (field)。
    mysql_list_dbs: 列出 MySQL 服务器可用的数据库 (database)。
    mysql_list_tables: 列出指定数据库的资料表 (table)。
    mysql_num_fields: 取得返回字段的数目。
    mysql_num_rows: 取得返回列的数目。
    mysql_pconnect: 打开 MySQL 服务器持续连接。
    mysql_query: 送出一个 query 字符串。
    mysql_result: 取得查询 (query) 的结果。
    mysql_select_db: 选择一个数据库。
    mysql_tablename: 取得资料表名称。

    mysql_affected_rows
    得到 MySQL 最后操作影响的列数目。
    语法: int mysql_affected_rows(int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可得到 MySQL 最后查询操作 INSERT、UPDATE 或 DELETE 所影响的列 (row) 数目。若最后的查询 (query) 是使用 DELETE 而且没有使用 WHERE 命令,则会删除全部资料,本函数将返回 0。若最后使用的是 SELECT,则用本函数不会得到预期的数目,因为要改变 MySQL 数据库本函数才有效,欲得到 SELECT 返回的数目需使用 mysql_num_rows() 函数。

    mysql_close
    关闭 MySQL 服务器连接。
    语法: int mysql_close(int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数关闭与 MySQL 数据库服务器的连接。若无指定参数 link_identifier 则会关闭最后的一笔连接。用 mysql_pconnect() 连接则无法使用本函数关闭。实际上本函数不是一定需要的,当 PHP 整页程序结束后,将会自动关闭与数据库的非永久性 (non-persistent) 连接。成功返回 true、失败返回 false 值。
    参考: mysql_connect() mysql_pconnect()

    mysql_connect
    打开 MySQL 服务器连接。
    语法: int mysql_connect(string [hostname] [:port], string [username], string [password]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数建立与 MySQL 服务器的连接。其中所有的参数都可省略。当使用本函数却不加任何参数时,参数 hostname 的默认值为 localhost、参数 username 的默认值为 PHP 执行行程的拥有者、参数 password 则为空字符串 (即没有密码)。而参数 hostname 后面可以加冒号与埠号,代表使用那个埠与 MySQL 连接。当然在使用数据库时,早点使用 mysql_close() 将连接关掉可以节省资源。
    使用范例
    这是一位未具名网友提供的范例 (18-Feb-1999)

    <?php 
    $dbh 
    mysql_connect('localhost:3306','mcclain','standard'); 
    mysql_select_db('admreqs'); 
    $query "insert into requests(date, request, email, priority,status) values (NOW(),'$description', '$email', '$priority', 'NEW')"
    $res mysql_query($query$dbh); 
    $query "select max(id) from requests"
    $res mysql_query($query$dbh); 
    $err mysql_error(); 
    if(
    $err){ 
    echo 
    "发生错误,请通知<a href=mailto:webmaster@my.site>站长</a>"

    $row mysql_fetch_row($res); 
    echo 
    "未来您使用的号码为: ".$row[0]; 
    ?> 

    php爱好者站 http://www.phpfans.net dreamweaver|flash|fireworks|photoshop.
    参考: mysql_close() mysql_pconnect()

    mysql_create_db
    建立一个 MySQL 新数据库。
    语法: int mysql_create_db(string database name, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数用来建立新的数据库 (database)。在建立前,必须先与服务器连接。
    参考: mysql_drop_db()

    mysql_data_seek
    移动内部返回指针。
    语法: int mysql_data_seek(int result_identifier, int row_number);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可移动内部返回的列指针到指定的 row_number 去。之后若使用 mysql_fetch_row() 可以返回新列的值。成功返回 true、失败则返回 false。

    mysql_db_query
    送查询字符串 (query) 到 MySQL 数据库。
    语法: int mysql_db_query(string database, string query, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数用来送出查询字符串 (query) 到后端的 MySQL 数据库中。而可省略的参数 link_identifier 若不存在,程序会自动寻找其它 mysql_connect() 连接后的连接代码。发生错误时会返回 false,其它没错误时则返回它的返回代码。
    参考: mysql_connect()

    mysql_drop_db
    移除数据库。
    语法: int mysql_drop_db(string database_name, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数移除已存在的数据库。成功返回 true、失败则返回 false。
    参考: mysql_create_db()

    mysql_errno
    返回错误信息代码。
    语法: int mysql_errno(int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到 MySQL 数据库服务器的错误代码。通常用在 PHP 网页程序开发阶段,作为 PHP 与 MySQL 的除错用。
    使用范例

    <?php
    mysql_connect
    ("marliesle");
    echo 
    mysql_errno().": ".mysql_error()."<BR>";
    mysql_select_db("nonexistentdb");
    echo 
    mysql_errno().": ".mysql_error()."<BR>";
    $conn mysql_query("SELECT * FROM nonexistenttable");
    echo 
    mysql_errno().": ".mysql_error()."<BR>";
    ?> 

    php爱好者站 http://www.phpfans.net php基础|php进阶|php模板.
    参考: mysql_error()

    mysql_error
    返回错误信息。
    语法: string mysql_error(int [link_identifier]);
    返回值: 字符串
    函数种类: 数据库功能
    内容说明: 本函数可以得到 MySQL 数据库服务器的错误信息。通常用在 PHP 网页程序开发阶段,与 mysql_errno() 一起作为PHP 与 MySQL 的除错用。
    参考: mysql_errno()

    mysql_fetch_array
    返回数组资料。
    语法: array mysql_fetch_array(int result, int [result_typ]);
    返回值: 数组
    函数种类: 数据库功能
    内容说明: 本函数用来将查询结果 result 拆到数组变量中。若 result 没有资料,则返回 false 值。而本函数可以说是 mysql_fetch_row() 的加强函数,除可以将返回列及数字索引放入数组之外,还可以将文字索引放入数组中。若是好几个返回字段都是相同的文字名称,则最后一个置入的字段有效,解决方法是使用数字索引或者为这些同名的字段 (column) 取别名 (alias)。治募?注意的是使用本函数的处理速度其实不会比 mysql_fetch_row() 函数慢,要用哪个函数还是看使用的需求决定。参数 result_typ 是一个常量值,有以下几种常量 MYSQL_ASSOC、MYSQL_NUM 与 MYSQL_BOTH。
    使用范例

    <?php
    mysql_connect
    ($host,$user,$password);
    $result mysql_db_query("database","select * from table");
    while(
    $row mysql_fetch_array($result)) {
    echo 
    $row["user_id"];
    echo 
    $row["fullname"];
    }
    mysql_free_result($result);
    ?> 

    php爱好者站 http://www.phpfans.net PHP|MySQL|javascript|ajax|html.
    mysql_fetch_field
    取得字段信息。
    语法: object mysql_fetch_field(int result, int [field_offset]);
    返回值: 类
    函数种类: 数据库功能
    内容说明: 本函数返回的类资料为 result 的字段 (Column) 信息。返回类的属性如下:
    name - 字段名称
    table - 字段所在表格的资料表名称
    max_length - 字段的最大长度
    not_null - 若为 1 表示本字段不能是空的 (null)
    primary_key - 若为 1 表示本字段是主要键 (primary key)
    unique_key - 若为 1 表示本字段为不可重覆键 (unique key)
    multiple_key - 若为 1 表示本字段为可重覆键 (non-unique key)
    numeric - 若为 1 表示本字段为数字类型 (numeric)
    blob - 若为 1 表示本字段为位类型 (BLOB)
    type - 字段类型
    unsigned - 若为 1 表示本字段为无记号 (unsigned)
    zerofill - 若为 1 表示本字段为被零填满 (zero-filled)
    参考: mysql_field_seek()

    mysql_fetch_lengths
    返回单列各栏资料最大长度。
    语法: array mysql_fetch_lengths(int result);
    返回值: 数组
    函数种类: 数据库功能
    内容说明: 本函数将 mysql_fetch_row() 处理过的最后一列资料的各字段资料最大长度放在数组变量之中。若执行失败则返回 false 值。返回数组的第一笔资料索引值是 0。
    参考: mysql_fetch_row()

    mysql_fetch_object
    返回类资料。
    语法: object mysql_fetch_object(int result, int [result_typ]);
    返回值: 类
    函数种类: 数据库功能
    内容说明: 本函数用来将查询结果 result 拆到类变量中。使用方法和 mysql_fetch_array() 几乎相同,不同的地方在于本函数返回资料是类而不是数组。若 result 没有资料,则返回 false 值。另外治募?注意的地方是,取回的类资料的索引只能是文字而不能用数字,这是因为类的特性。类资料的特性中所有的属性 (property) 名称都不能是数字,因此只好乖乖使用文字字符串当索引了。参数 result_typ是一个常量值,有以下几种常量 MYSQL_ASSOC、MYSQL_NUM 与 MYSQL_BOTH。关于速度方面,本函数的处理速度几乎和 mysql_fetch_row() 及 mysql_fetch_array() 二函数差不多,要用哪个函数还是看使用的需求决定。
    使用范例
    下面的例子示范如使用返回的类。

    <?php 
    mysql_connect
    ($host,$user,$password);
    $result mysql_db_query("MyDatabase","select * from test");
    while(
    $row mysql_fetch_object($result)) {
    echo 
    $row->user_id;
    echo 
    $row->fullname;
    }
    mysql_free_result($result);
    ?> 

    php爱好者站 http://www.phpfans.net c/vc/c++/java.
    参考: mysql_fetch_array() mysql_fetch_row()

    mysql_fetch_row
    返回单列的各字段。
    语法: array mysql_fetch_row(int result);
    返回值: 数组
    函数种类: 数据库功能
    内容说明: 本函数用来将查询结果 result 之单列拆到数组变量中。数组的索引是数字索引,第一个的索引值是 0。若 result 没有资料,则返回 false 值。
    参考: mysql_fetch_array() mysql_fetch_object() mysql_data_seek() mysql_fetch_lengths() mysql_result()

    mysql_field_name
    返回指定字段的名称。
    语法: string mysql_field_name(int result, int field_index);
    返回值: 字符串
    函数种类: 数据库功能
    内容说明: 本函数用来取得指定字段的名称。
    使用范例
    mysql_field_name($result,2);

    mysql_field_seek
    配置指针到返回治募?某字段。
    语法: int mysql_field_seek(int result, int field_offset);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数配置目前的指针到返回治募?特定字段中。
    参考: mysql_fetch_field()

    mysql_field_table
    获得目前字段的资料表 (table) 名称。
    语法: string mysql_field_table(int result, int field_offset);
    返回值: 字符串
    函数种类: 数据库功能
    内容说明: 本函数可以得到目前所在字段的资料表名。

    mysql_field_type
    获得目前字段的类型。
    语法: string mysql_field_type(int result, int field_offset);
    返回值: 字符串
    函数种类: 数据库功能
    内容说明: 本函数可以得到目前所在字段的类型格式。返回的字符串为字段的类型,包括了 int、real、string、blob....等等,详见 MySQL 的相关文件中有关于类型的部份。
    使用范例

    <?php
    mysql_connect
    ("localhost:3306");
    mysql_select_db("wisconsin");
    $result mysql_query("SELECT * FROM onek");
    $fields mysql_num_fields($result);
    $rows mysql_num_rows($result);
    $i 0;
    $table mysql_field_table($result$i);
    echo 
    "资料表 '".$table."' 有 ".$fields." 栏及 ".$rows." 列。<br>";
    echo 
    "本资料表的字段如下<br>";
    while (
    $i $fields) {
    $type mysql_field_type ($result$i);
    $name mysql_field_name ($result$i);
    $len mysql_field_len ($result$i);
    $flags mysql_field_flags ($result$i);
    echo 
    $type." ".$name." ".$len." ".$flags."<br>";
    $i++;
    }
    mysql_close();
    ?> 

    php爱好者站 http://www.phpfans.net 文章|教程|下载|源码|论坛.
    mysql_field_flags
    获得目前字段的标志。
    语法: string mysql_field_flags(int result, int field_offset);
    返回值: 字符串
    函数种类: 数据库功能
    内容说明: 本函数可以得到目前所在字段的标志。若一个字段有数种属性标志,则返回的标志为这些属性连起来的字符串,每个属性都用空格隔开,可以使用 explode() 切开这些字符串。返回的标志可能是:not_null、primary_key、unique_key、multiple_key、blob、unsigned、zerofill、binary、enum、auto_increment、timestamp。

    mysql_field_len
    获得目前字段的长度。
    语法: int mysql_field_len(int result, int field_offset);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到目前所在字段的长度。

    mysql_free_result
    释放返回占用内存。
    语法: boolean mysql_free_result(int result);
    返回值: 布尔值
    函数种类: 数据库功能
    内容说明: 本函数可以释放目前 MySQL 数据库 query 返回所占用的内存。一般只有在非常担心在内存的使用上可能会不足的情形下才会用本函数。PHP 程序会在结束时自动释放。

    mysql_insert_id
    返回最后一次使用 INSERT 指令的 ID。
    语法: int mysql_insert_id(int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到最后一次使用 INSERT 到 MySQL 数据库的执行 ID。sleibowitz@btcwcu.org (13-May-1999) 指出在 PHP 3.0.7 版用 REPLACE 也和使用 INSERT 一样,可以使用本函数获得 ID。

    mysql_list_fields
    列出指定资料表的字段 (field)。
    语法: int mysql_list_fields(string database_name, string table_name, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到指定的资料表的所有字段。返回的字段信息可以供 mysql_field_flags()、mysql_field_len()、mysql_field_name() 及 mysql_field_type() 等函数使用。若有错误则返回 -1。

    mysql_list_dbs
    列出 MySQL 服务器可用的数据库 (database)。
    语法: int mysql_list_dbs(int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到 MySQL 服务器的可用数据库。

    mysql_list_tables
    列出指定数据库的资料表 (table)。
    语法: int mysql_list_tables(string database, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到指定数据库中的所有资料表名称。

    mysql_num_fields
    取得返回字段的数目。
    语法: int mysql_num_fields(int result);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到返回字段的数目。
    参考: mysql_db_query() mysql_query() mysql_fetch_field() mysql_num_rows()

    mysql_num_rows
    取得返回列的数目。
    语法: int mysql_num_rows(int result);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数可以得到返回列的数目。
    参考: mysql_db_query() mysql_query() mysql_fetch_row()

    mysql_pconnect
    打开 MySQL 服务器持续连接。
    语法: int mysql_pconnect(string [hostname] [:port], string [username], string [password]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数和 mysql_connect() 雷同。不同的地方在于使用本函数打开数据库时,程序会先寻找是否曾经执行过本函数,若执行过则返回先前执行的 ID。另一个不同的地方是本函数无法使用 mysql_close() 关闭数据库。

    mysql_query
    送出一个 query 字符串。
    语法: int mysql_query(string query, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数送出 query 字符串供 MySQL 做相关的处理或者执行。若没有指定 link_identifier 参数,则程序会自动寻找最近打开的 ID。当 query 查询字符串是 UPDATE、INSERT 及 DELETE 时,返回的可能是 true 或者 false;查询的字符串是 SELECT 则返回新的 ID 值。joey@samaritan.com (09-Feb-1999) 指出,当返回 false 时,并不是执行成功但无返回值,而是查询的字符串有错误。
    参考: mysql_db_query() mysql_select_db() mysql_connect()

    mysql_result
    取得查询 (query) 的结果。
    语法: int mysql_result(int result, int row, mixed field);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数取得一格 query 的结果。参数 field 可以是字段名称、顺序或者是 FieldName.TableName 的格式。在返回资料量少时,可以使用本函数来处理。当数据库大时,本函数的效率就有待考量了,这时可以使用较有效率的 mysql_fetch_row()、mysql_fetch_array() 及 mysql_fetch_object() 等函数。

    mysql_select_db
    选择一个数据库。
    语法: int mysql_select_db(string database_name, int [link_identifier]);
    返回值: 整数
    函数种类: 数据库功能
    内容说明: 本函数选择 MySQL 服务器中的数据库以供之后的资料查询作业 (query) 处理。成功返回 true,失败则返回 false。
    参考: mysql_connect() mysql_pconnect() mysql_query()

    mysql_tablename
    取得资料表名称。
    语法: string mysql_tablename(int result, int i);
    返回值: 字符串
    函数种类: 数据库功能
    内容说明: 本函数可取得资料表名称字符串,一般配合 mysql_list_tables() 函数使用,取得该函返回的数字的名称字符串。
    使用范例

    <?php 
    mysql_connect 
    ("localhost:3306");
    $result mysql_list_tables ("wisconsin");
    $i 0;
    while (
    $i mysql_num_rows ($result)) {
    $tb_names[$i] = mysql_tablename ($result$i);
    echo 
    $tb_names[$i] . "<BR>";
    $i++;
    }
    ?> 

    非常全面的一个php技术网站

    DEDE的文章查询SQL

    1: 查询查看要删除的文章情况的代码:
    select * from dede_addonarticle where length(body)<30
    2: 删除内容表.
    delete from dede_addonarticle where length(body)<30
    3: 查询查看要删除的文章情况的第二个表的代码:
    select *
    from dede_archives t1
    left join dede_addonarticle t2 on t1.id=t2.aid
    where t2.aid is null
    4: 删除第二个表.
    Delete dede_archives
    from dede_archives t1
    left join dede_addonarticle t2 on t1.id=t2.aid
    where t2.aid is null