MySQL server has gone away的解决办法

最近做网站有一个站要用到WEB网页采集器功能,当一个PHP脚本在请求URL的时候,可能这个被请求的网页非常慢慢,超过了mysql的 wait-timeout时间,然后当网页内容被抓回来后,准备插入到MySQL的时候,发现MySQL的连接超时关闭了,于是就出现了“MySQL server has gone away”这样的错误提示,解决这个问题,我的经验有以下两点,或许对大家有用处:

第一种方法:

当然是增加你的 wait-timeout值,这个参数是在my.cnf(在Windows下台下面是my.ini)中设置,我的数据库负荷稍微大一点,所以,我设置的值 为10,(这个值的单位是秒,意思是当一个数据库连接在10秒钟内没有任何操作的话,就会强行关闭,我使用的不是永久链接 (mysql_pconnect),用的是mysql_connect,关于这个wait-timeout的效果你可以在MySQL的进程列表中看到 (show processlist) ),你可以把这个wait-timeout设置成更大,比如300秒,呵呵,一般来讲300秒足够用了,其实你也可以不用设置,MySQL默认是8个小 时。情况由你的服务器和站点来定。
继续阅读MySQL server has gone away的解决办法

DEDEcms使用SQL获得当天已审核的文章总数

24小时发布的新文章:
86400 是 3600 * 24,就是24小时发布的新文章。

select count(id)+0 as total from dede_archives where UNIX_TIMESTAMP() - pubdate < 86400 and arcrank >0;

任意日期发布的最新文章:

SELECT count(ID) as count from dede_archives where pubdate > UNIX_TIMESTAMP( FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00'))  limit 1;

任意日期审核通过的最新文章

SELECT count(ID) as count from dede_archives where pubdate > UNIX_TIMESTAMP( FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00')) and arcrank >  limit 1;

获取当日的零时时间:

FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00')

获取当时零时时间戳:

UNIX_TIMESTAMP( FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d 00:00:00'))

当天发布的最新文章:

SELECT count(ID) as count from dede_archives where to_days(curdate())=to_days(from_unixtime(pubdate))  limit 1;

这里使用 to_days(curdate())=to_days(from_unixtime(pubdate)),使用起来比较方便,资源占用也少,在只查询当天的文档时,推荐使用。

查看mysql实时运行sql的工具–orztop

以前分析其它程序的运行过程,会把Mysql所有的查询日志记录下来,然后一步步分析流程。现在发现淘宝的DBA同学们放出一个运营的工具,挺方便的,在工作中已经用上了。目前不支持Mac。

orztop

安装过程如下:

yum -y install perl-DBD-MySQL -y
yum install perl-CPAN perl-TermReadKey -y

查看命令如下:

./orztop -h 127.1 -u root -p 1q2w3e4r5t
./orztop --help

修复升级Mysql时的1577错误,附升级文件包

环境:Windows,Mysql5.x

理论上Linux下也一样。

错误提示"Please try to update your system table and to see if it solves your problem. mysql_upgrade is stored in the "bin" folder under the MySQL server installation path.";

错误分析:可能是直接复制不同版本之间的MYSQL数据库目录。比如我,备份了低版本的MYSQL数据库DATA到新版的目录下。

错误影响:数据库可以正常使用,但会造成一定的管理错误,如可视化mysql数据库管理工具Navicat for mysql的错误提示。

我是离不开Navicat的,虽不影响使用,但也得解决这个问题。

这个问题已经遇到几次了,不得不写下大篇文档纪念之。

方法很简单,使用mysql/bin目录下的mysql_upgrade.exe进行升级就可以了。

使用方法:

开始->运行->输入cmd回车,在操作提示符下输入

E:\APMServ5.2.6\MySQL5.1\bin\mysql_upgrade -uroot -pPWD

然后回车(将其中的E:\APMserv5.2.6改成你自己实际安装的目录,PWD改成你的密码即可),执行完以后就OK了。

当然,有一些版本的APMServ有精简,可能没有mysql_upgrade.exe和mysqlcheck.exe这两个文件,解决办法也很简单,直接下载一个对应版本的MYSQL免安装版本,将这两个文件复制过去就行了。

FML...

换了服务器以后,终于还是又遇上了这个问题,自己又下载了Mysql进行修复,麻烦呐。

遂将需要到的文件mysql_upgrade.exe和mysqlcheck.exe打包于后,备用。

bin

PHP+PDO+MSSQL的灾难。

PHP6默认就使用PDO进行数据库之间的连接方法了,本来以后可以等PHP6出来再去适应,想不到前天接下的一个项目却让我提前过了一把瘾。

灾难呀。

首先是PDO报错的方法,改成编号了,连接数据库的“数据库密码错误”却变成“8000”的错误代码,一搜,N种错误可能。

再次,我怎么感觉PDO的效率不那么理想,一个IP的连接,一直连接到超时都不报错。

最后,怎么还是感觉自己写的类好用,适应起来还真是别扭。

最后,很痛苦的事情出在PDO+MSSQL的分页上,真是灾难中的灾难。

这次的项目需要将MSSQL中的数据转换到Mysql中,本来想用PDO练练手的,结果却死也找不到PDO+MSSQL的分页类。习惯了到网上找资源、找类库、找函数,一时间找不到前辈们的杰作,真让人惶恐不已。前无古人,这种感觉未必那么有成就感。

MSSQL的分页历来被人诟病,相比之下,我真想说“Mysql,我爱死你了”。

好想发一个表情,结果没有,懒得倒腾了。一一!

MYSQL 数据库函数库备忘

一、数学函数
ABS(x)                    返回x的绝对值
BIN(x)          返回x的二进制(OCT返回八进制,HEX返回十六进制)
CEILING(x)                返回大于x的最小整数值
EXP(x)          返回值e(自然对数的底)的x次方
FLOOR(x)         返回小于x的最大整数值
GREATEST(x1,x2,...,xn)  返回集合中最大的值
LEAST(x1,x2,...,xn)       返回集合中最小的值
LN(x)                     返回x的自然对数
LOG(x,y)         返回x的以y为底的对数
MOD(x,y)                  返回x/y的模(余数)
PI()           返回pi的值(圆周率)
RAND()          返回0到1内的随机值,可以通过提供一个参数(种子)使RAND()随机数生成器生成一个指定的值。
ROUND(x,y)        返回参数x的四舍五入的有y位小数的值
SIGN(x)          返回代表数字x的符号的值
SQRT(x)          返回一个数的平方根
TRUNCATE(x,y)             返回数字x截短为y位小数的结果
二、聚合函数(常用于GROUP BY从句的SELECT查询中)
AVG(col)         返回指定列的平均值
COUNT(col)        返回指定列中非NULL值的个数
MIN(col)         返回指定列的最小值
MAX(col)         返回指定列的最大值
SUM(col)         返回指定列的所有值之和

GROUP_CONCAT(col)     返回由属于一组的列值连接组合而成的结果
三、字符串函数
ASCII(char)        返回字符的ASCII码值
BIT_LENGTH(str)      返回字符串的比特长度
CONCAT(s1,s2...,sn)    将s1,s2...,sn连接成字符串
CONCAT_WS(sep,s1,s2...,sn)  将s1,s2...,sn连接成字符串,并用sep字符间隔

INSERT(str,x,y,instr)    将字符串str从第x位置开始,y个字符长的子串替换为字符串instr,返回结果
FIND_IN_SET(str,list)   分析逗号分隔的list列表,如果发现str,返回str在list中的位置
LCASE(str)或LOWER(str)   返回将字符串str中所有字符改变为小写后的结果
LEFT(str,x)        返回字符串str中最左边的x个字符
LENGTH(s)         返回字符串str中的字符数

LTRIM(str)         从字符串str中切掉开头的空格
POSITION(substr,str)    返回子串substr在字符串str中第一次出现的位置
QUOTE(str)         用反斜杠转义str中的单引号
REPEAT(str,srchstr,rplcstr)返回字符串str重复x次的结果
REVERSE(str)        返回颠倒字符串str的结果
RIGHT(str,x)        返回字符串str中最右边的x个字符
RTRIM(str)         返回字符串str尾部的空格
STRCMP(s1,s2)       比较字符串s1和s2
TRIM(str)         去除字符串首部和尾部的所有空格
UCASE(str)或UPPER(str)   返回将字符串str中所有字符转变为大写后的结果
四、日期和时间函数
CURDATE()或CURRENT_DATE() 返回当前的日期
CURTIME()或CURRENT_TIME() 返回当前的时间
DATE_ADD(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECT DATE_ADD(CURRENT_DATE,INTERVAL 6 MONTH);
DATE_FORMAT(date,fmt)   依照指定的fmt格式格式化日期date值
DATE_SUB(date,INTERVAL int keyword) 返回日期date加上间隔时间int的结果(int必须按照关键字进行格式化),如:SELECT DATE_SUB(CURRENT_DATE,INTERVAL 6 MONTH);
DAYOFWEEK(date)    返回date所代表的一星期中的第几天(1~7)
DAYOFMONTH(date)   返回date是一个月的第几天(1~31)
DAYOFYEAR(date)    返回date是一年的第几天(1~366)
DAYNAME(date)    返回date的星期名,如:SELECT DAYNAME(CURRENT_DATE);
FROM_UNIXTIME(ts,fmt)   根据指定的fmt格式,格式化UNIX时间戳ts
HOUR(time)    返回time的小时值(0~23)
MINUTE(time)    返回time的分钟值(0~59)
MONTH(date)    返回date的月份值(1~12)
MONTHNAME(date)    返回date的月份名,如:SELECT MONTHNAME(CURRENT_DATE);
NOW()     返回当前的日期和时间
QUARTER(date)    返回date在一年中的季度(1~4),如SELECT QUARTER(CURRENT_DATE);
WEEK(date)    返回日期date为一年中第几周(0~53)
YEAR(date)    返回日期date的年份(1000~9999)
一些示例:
获取当前系统时间:SELECT FROM_UNIXTIME(UNIX_TIMESTAMP());
SELECT EXTRACT(YEAR_MONTH FROM CURRENT_DATE);
SELECT EXTRACT(DAY_SECOND FROM CURRENT_DATE);
SELECT EXTRACT(HOUR_MINUTE FROM CURRENT_DATE);
返回两个日期值之间的差值(月数):SELECT PERIOD_DIFF(200302,199802);
在Mysql中计算年龄:
SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(birthday)), '%Y')+0 AS age FROM employee;
这样,如果Brithday是未来的年月日的话,计算结果为0。
下面的SQL语句计算员工的绝对年龄,即当Birthday是未来的日期时,将得到负值。
SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(birthday, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(birthday, '00-%m-%d')) AS age from employee
五、加密函数
AES_ENCRYPT(str,key)   返回用密钥key对字符串str利用高级加密标准算法加密后的结果,调用AES_ENCRYPT的结果是一个二进制字符串,以BLOB类型存储
AES_DECRYPT(str,key)   返回用密钥key对字符串str利用高级加密标准算法解密后的结果
DECODE(str,key)    使用key作为密钥解密加密字符串str
ENCRYPT(str,salt)   使用UNIX crypt()函数,用关键词salt(一个可以惟一确定口令的字符串,就像钥匙一样)加密字符串str
ENCODE(str,key)    使用key作为密钥加密字符串str,调用ENCODE()的结果是一个二进制字符串,它以BLOB类型存储
MD5()     计算字符串str的MD5校验和
PASSWORD(str)    返回字符串str的加密版本,这个加密过程是不可逆转的,和UNIX密码加密过程使用不同的算法。
SHA()     计算字符串str的安全散列算法(SHA)校验和
示例:
SELECT ENCRYPT('root','salt');
SELECT ENCODE('xufeng','key');
SELECT DECODE(ENCODE('xufeng','key'),'key');#加解密放在一起
SELECT AES_ENCRYPT('root','key');
SELECT AES_DECRYPT(AES_ENCRYPT('root','key'),'key');
SELECT MD5('123456');
SELECT SHA('123456');
六、控制流函数
MySQL有4个函数是用来进行条件操作的,这些函数可以实现SQL的条件逻辑,允许开发者将一些应用程序业务逻辑转换到数据库后台。
MySQL控制流函数:
CASE WHEN[test1] THEN [result1]...ELSE [default] END 如果testN是真,则返回resultN,否则返回default
CASE [test] WHEN[val1] THEN [result]...ELSE [default] END   如果test和valN相等,则返回resultN,否则返回default
IF(test,t,f)   如果test是真,返回t;否则返回 f
IFNULL(arg1,arg2) 如果arg1不是空,返回arg1,否则返回arg2
NULLIF(arg1,arg2) 如果arg1=arg2返回NULL;否则返回arg1

这些函数的第一个是IFNULL(),它有两个参数,并且对第一个参数进行判断。如果第一个参数不是NULL,函数就会向调用者返回第一个参数;如果是NULL,将返回第二个参数。
如:SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(4*NULL,'false');
NULLIF()函数将会检验提供的两个参数是否相等,如果相等,则返回NULL,如果不相等,就返回第一个参数。
如:SELECT NULLIF(1,1),NULLIF('A','B'),NULLIF(2+3,4+1);
和许多脚本语言提供的IF()函数一样,MySQL的IF()函数也可以建立一个简单的条件测试,这个函数有三个参数,第一个是要被判断的表达式,如果表达式为真,IF()将会返回第二个参数,如果为假,IF()将会返回第三个参数。
如:SELECT IF(1<10,2,3),IF(56>100,'true','false');
IF()函数在只有两种可能结果时才适合使用。然而,在现实世界中,我们可能发现在条件测试中会需要多个分支。在这种情况下,MySQL提供了CASE函数,它和PHP及Perl语言的switch-case条件例程一样。
CASE函数的格式有些复杂,通常如下所示:
CASE [expression to be evaluated]
WHEN [val 1] THEN [result 1]
WHEN [val 2] THEN [result 2]
WHEN [val 3] THEN [result 3]
......
WHEN [val n] THEN [result n]
ELSE [default result]
END
这里,第一个参数是要被判断的值或表达式,接下来的是一系列的WHEN-THEN块,每一块的第一个参数指定要比较的值,如果为真,就返回结果。所有的 WHEN-THEN块将以ELSE块结束,当END结束了所有外部的CASE块时,如果前面的每一个块都不匹配就会返回ELSE块指定的默认结果。如果没有指定ELSE块,而且所有的WHEN-THEN比较都不是真,MySQL将会返回NULL。
CASE函数还有另外一种句法,有时使用起来非常方便,如下:
CASE
WHEN [conditional test 1] THEN [result 1]
WHEN [conditional test 2] THEN [result 2]
ELSE [default result]
END
这种条件下,返回的结果取决于相应的条件测试是否为真。
示例:
mysql>SELECT CASE 'green'
WHEN 'red' THEN 'stop'
WHEN 'green' THEN 'go' END;
SELECT CASE 9 WHEN 1 THEN 'a' WHEN 2 THEN 'b' ELSE 'N/A' END;
SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN (2+2)<>4 THEN 'not OK' END AS STATUS;
SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROM UserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total,
CASE WHEN (math+sci+lit) < 50 THEN 'D'
WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C'
WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B'
ELSE 'A' END
AS grade FROM marks;
SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResult FROM users WHERE uname = 'sue';#一个登陆验证
七、格式化函数
DATE_FORMAT(date,fmt)   依照字符串fmt格式化日期date值
FORMAT(x,y)    把x格式化为以逗号隔开的数字序列,y是结果的小数位数
INET_ATON(ip)    返回IP地址的数字表示
INET_NTOA(num)    返回数字所代表的IP地址
TIME_FORMAT(time,fmt)   依照字符串fmt格式化时间time值
其中最简单的是FORMAT()函数,它可以把大的数值格式化为以逗号间隔的易读的序列。
示例:
SELECT FORMAT(34234.34323432,3);
SELECT DATE_FORMAT(NOW(),'%W,%D %M %Y %r');
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d');
SELECT DATE_FORMAT(19990330,'%Y-%m-%d');
SELECT DATE_FORMAT(NOW(),'%h:%i %p');
SELECT INET_ATON('10.122.89.47');
SELECT INET_NTOA(175790383);
八、类型转化函数
为了进行数据类型转化,MySQL提供了CAST()函数,它可以把一个值转化为指定的数据类型。类型有:BINARY,CHAR,DATE,TIME,DATETIME,SIGNED,UNSIGNED
示例:
SELECT CAST(NOW() AS SIGNED INTEGER),CURDATE()+0;
SELECT 'f'=BINARY 'F','f'=CAST('F' AS BINARY);
九、系统信息函数
DATABASE()    返回当前数据库名
BENCHMARK(count,expr)   将表达式expr重复运行count次
CONNECTION_ID()    返回当前客户的连接ID
FOUND_ROWS()    返回最后一个SELECT查询进行检索的总行数
USER()或SYSTEM_USER()   返回当前登陆用户名
VERSION()    返回MySQL服务器的版本
示例:
SELECT DATABASE(),VERSION(),USER();
SELECT BENCHMARK(9999999,LOG(RAND()*PI()));#该例中,MySQL计算LOG(RAND()*PI())表达式9999999次。

DELETE,UPDATE与LEFT JOIN



#UPDATE:
UPDATE A SET ApproverID=NULL,ApproveDate=NULL,ApproveResult=100,CheckerID=null,CheckDate=null, IsCheck=0
FROM [SH_MaterialApplyBuyBill] A
LEFT JOIN [SH_MaterialApplyBuyBillDetail] B ON A.ID=B.[MaterialApplyBuyBillID]
WHERE A.id=125 AND @InDetailCount=0
#DELETE:
DELETE A FROM [SH_ClosingBalance] A LEFT JOIN [SH_StoreHouse] B ON A.StoreHouseID=B.ID
WHERE B.departmentID='1000'

update table1 set a.a=1
from  table1  a inner join table2 b on a.ip=b.ip

MySQL中的转义字符列表


MySQL的转义字符“\”

MySQL识别下列转义字符:

\0
一个ASCII 0 (NUL)字符。
\n
一个新行符。
\t
一个定位符。
\r
一个回车符。
\b
一个退格符。
\'
一个单引号(“'”)符。
\ "
一个双引号(“ "”)符。
\\
一个反斜线(“\”)符。
\%
一个“%”符。它用于在正文中搜索“%”的文字实例,否则这里“%”将解释为一个通配符。
\_
一个“_”符。它用于在正文中搜索“_”的文字实例,否则这里“_”将解释为一个通配符。
注意,如果你在某些正文环境中使用“\%”或“\%_”,这些将返回字符串“\%”和“\_”而不是“%”和“_”。

★★
有几种方法在一个字符串内包括引号:
1、必须转义的:
一个字符串用单引号“'”来引用的,该字符串中的单引号“'”字符可以用“''”方式转义。
一个字符串用双引号“ "”来引用的,该字符串中的“ "”字符可以用“ " "”方式转义。
同时你也可以继续使用一个转义字符“\”来转义
2、可不转义的:
一个字符串用双引号“ "”来引用的,该字符串中的单引号“'”不需要特殊对待而且不必被重复或转义。
同理,
一个字符串用单引号“'”来引用的,该字符串中的双引号“ "”不需要特殊对待而且不必被重复或转义。

下面显示的SELECT演示引号和转义如何工作:

mysql > SELECT 'hello', ' "hello "', ' " "hello " "', 'hel''lo', '\'hello';
+----------+--------------+-------------------+----------+---------+
¦ hello ¦ "hello " ¦ " "hello " " ¦ hel'lo ¦ 'hello ¦
+----------+--------------+-------------------+----------+---------+

mysql > SELECT "hello ", "'hello' ", "''hello'' ", "hel " "lo ", "\ "hello ";
+----------+----------+-----------+------------+-----------+
¦ hello ¦ 'hello' ¦ ''hello'' ¦ hel "lo ¦ "hello ¦
+---------+-----------+-----------+------------+-----------+

mysql > SELECT "This\nIs\nFour\nlines ";
+--------------------+
¦ This
Is
Four
lines ¦
+--------------------+

★★

如果你想要把二进制数据插入到一个BLOB列,下列字符必须由转义序列表示:

NUL
ASCII 0。你应该用'\0'(一个反斜线和一个ASCII '0')表示它。
\
ASCII 92,反斜线。用'\\'表示。
'
ASCII 39,单引号。用“\'”表示。
"
ASCII 34,双引号。用“\ "”表示。

mysql 中的数据类型

 

数据类型

描述

字节

推荐使用

SMALLINT

整数,从-32000到 +32000范围

2

存储相对比较小的整数。

比如: 年纪,数量

INT

整数,从-2000000000 到 +2000000000 范围

4

存储中等整数

例如: 距离

BIGINT

不能用SMALLINT 或 INT描述的超大整数。

8

存储超大的整数

例如: 科学/数学数据

FLOAT

单精度浮点型数据

4

存储小数数据

例如:测量,温度

DOUBLE

双精度浮点型数据

8

需要双精度存储的小数数据

例如:科学数据

DECIMAL

用户自定义精度的浮点型数据

变量;取决于精度与长度

以特别高的精度存储小数数据。

例如:货币数额,科学数据

CHAR

固定长度的字符串

特定字符串长度(高达255字符)

存储通常包含预定义字符串的变量

例如: 定期航线,国家或邮编

VARCHAR

具有最大限制的可变长度的字符串

变量; 1 + 实际字符串长度 (高达 255 字符)

存储不同长度的字符串值(高达一个特定的最大限度).

例如:名字,密码,短文标签

TEXT

没有最大长度限制的可变长度的字符串

Variable; 2 +聽 actual string length

存储大型文本数据

例如: 新闻故事,产品描述

BLOB

二进制字符串

变量;2 + 实际字符串长度

存储二进制数据

例如:图片,附件,二进制文档

DATE

以 yyyy-mm-dd格式的日期

3

存储日期

例如:生日,产品满期

TIME

以 hh:mm:ss格式的时间

3

存储时间或时间间隔

例如:报警声,两时间之间的间隔,任务开始/结束时间

DATETIME

以yyyy-mm-ddhh:mm:ss格式结合日期和时间

8

存储包含日期和时间的数据

例如:提醒的人,事件

TIMESTAMP

以yyyy-mm-ddhh:mm:ss格式结合日期和时间

4

记录即时时间

例如:事件提醒器,“最后进入”的时间标记

YEAR

以 yyyy格式的年份

1

存储年份

例如:毕业年,出生年

ENUM

一组数据,用户可从中选择其中一个

1或 2个字节

存储字符属性,只能从中选择之一

例如:布尔量选择,如性别

SET

一组数据,用户可从中选择其中0,1或更多。

从1到8字节;取决于设置的大小

存储字符属性,可从中选择多个字符的联合。

例如:多选项选择,比如业余爱好和兴趣。

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技术网站