‘学习资料’栏目的所有文章
收集一些常用的正则表达式
“^\d+$” //非负整数(正整数 + 0)
“^[0-9]*[1-9][0-9]*$” //正整数
“^((-\d+)|(0+))$” //非正整数(负整数 + 0)
“^-[0-9]*[1-9][0-9]*$” //负整数
“^-?\d+$” //整数
“^\d+(\.\d+)?$” //非负浮点数(正浮点数 + 0)
“^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮点数
“^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮点数(负浮点数 + 0)
“^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$” //负浮点数
“^(-?\d+)(\.\d+)?$” //浮点数
“^[A-Za-z]+$” //由26个英文字母组成的字符串
“^[A-Z]+$” //由26个英文字母的大写组成的字符串
“^[a-z]+$” //由26个英文字母的小写组成的字符串
“^[A-Za-z0-9]+$” //由数字和26个英文字母组成的字符串
“^\w+$” //由数字、26个英文字母或者下划线组成的字符串
“^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址
“^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$” //url
/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/ // 年-月-日
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/ // 月/日/年
“^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$” //Emil
/^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/ //电话号码
“^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$” //IP地址
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网址URL的正则表达式:^[a-zA-z]+://(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
匹配国内电话号码:(\d{3}-|\d{4}-)?(\d{8}|\d{7})?
匹配腾讯QQ号:^[1-9]*[1-9][0-9]*$
元字符及其在正则表达式上下文中的行为:
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个后向引用、或一个八进制转义符。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。? 等价于 {0,1}。
{n} n 是一个非负整数,匹配确定的n 次。
{n,} n 是一个非负整数,至少匹配n 次。
{n,m} m 和 n 均为非负整数,其中n [...]
键盘上每个键作用!!!
F1帮助
F2改名
F3搜索
F4地址
F5刷新
F6切换
F10菜单
CTRL+A全选
CTRL+C复制
CTRL+X剪切
CTRL+V粘贴
CTRL+Z撤消
CTRL+O打开
SHIFT+DELETE永久删除
DELETE删除
ALT+ENTER属性
ALT+F4关闭
CTRL+F4关闭
ALT+TAB切换
ALT+ESC切换
ALT+空格键窗口菜单
CTRL+ESC开始菜单
拖动某一项时按CTRL复制所选项目
拖动某一项时按CTRL+SHIFT创建快捷方式
将光盘插入到CD-ROM驱动器时按SHIFT键阻止光盘自动播放
Ctrl+1,2,3… 切换到从左边数起第1,2,3…个标签
Ctrl+A 全部选中当前页面内容
Ctrl+C 复制当前选中内容
Ctrl+D 打开“添加收藏”面版(把当前页面添加到收藏夹中)
Ctrl+E 打开或关闭“搜索”侧边栏(各种搜索引擎可选)
Ctrl+F 打开“查找”面版
Ctrl+G 打开或关闭“简易收集”面板
Ctrl+H 打开“历史”侧边栏
Ctrl+I 打开“收藏夹”侧边栏/另:将所有垂直平铺或水平平铺或层叠的窗口恢复
Ctrl+K 关闭除当前和锁定标签外的所有标签
Ctrl+L 打开“打开”面版(可以在当前页面打开Iternet地址或其他文件…)
Ctrl+N 新建一个空白窗口(可更改,Maxthon选项→标签→新建)
Ctrl+O 打开“打开”面版(可以在当前页面打开Iternet地址或其他文件…)
Ctrl+P 打开“打印”面板(可以打印网页,图片什么的…)
Ctrl+Q 打开“添加到过滤列表”面板(将当前页面地址发送到过滤列表)
Ctrl+R 刷新当前页面
Ctrl+S 打开“保存网页”面板(可以将当前页面所有内容保存下来)
Ctrl+T 垂直平铺所有窗口
Ctrl+V 粘贴当前剪贴板内的内容
Ctrl+W 关闭当前标签(窗口)
Ctrl+X 剪切当前选中内容(一般只用于文本操作)
Ctrl+Y 重做刚才动作(一般只用于文本操作)
Ctrl+Z 撤消刚才动作(一般只用于文本操作)
Ctrl+F4 关闭当前标签(窗口)
Ctrl+F5 刷新当前页面
Ctrl+F6 按页面打开的先后时间顺序向前切换标签(窗口)
Ctrl+F11 隐藏或显示菜单栏
Ctrl+Tab 以小菜单方式向下切换标签(窗口)
Ctrl+Enter 域名自动完成http://www.XXX.com(内容可更改,Maxthon选项→地址栏→常规)/另:当输入焦点在搜索栏中时,为高亮关键字
Ctrl+拖曳 保存该链接的地址或已选中的文本或指定的图片到一个文件夹中(保存目录可更改,Maxthon选项→保存)
Ctrl+小键盘’+’ 当前页面放大20%
Ctrl+小键盘’-’ 当前页面缩小20%
Ctrl+小键盘’*’ 恢复当前页面的缩放为原始大小
Ctrl+Alt+S 自动保存当前页面所有内容到指定文件夹(保存路径可更改,Maxthon选项→保存)
Ctrl+Shift+小键盘’+’ 所有页面放大20%
Ctrl+Shift+小键盘’-’ 所有页面缩小20%
Ctrl+Shift+F 输入焦点移到搜索栏
Ctrl+Shift+G 关闭“简易收集”面板
Ctrl+Shift+H 打开并激活到你设置的主页
Ctrl+Shift+N 在新窗口中打开剪贴板中的地址,如果剪贴板中为文字,则调用搜索引擎搜索该文字(搜索引擎可选择,Maxthon选项→搜索)
Ctrl+Shift+S 打开“保存网页”面板(可以将当前页面所有内容保存下来,等同于Ctrl+S)
Ctrl+Shift+W 关闭除锁定标签外的全部标签(窗口)
Ctrl+Shift+F6 按页面打开的先后时间顺序向后切换标签(窗口)
Ctrl+Shift+Tab 以小菜单方式向上切换标签(窗口)
Ctrl+Shift+Enter 域名自动完成http://www.XXX.com.cn(内容可更改,Maxthon选项→地址栏→常规)
Alt+1 保存当前表单
Alt+2 保存为通用表单
Alt+A 展开收藏夹列表
资源管理器
END显示当前窗口的底端
HOME显示当前窗口的顶端
NUMLOCK+数字键盘的减号(-)折叠所选的文件夹
NUMLOCK+数字键盘的加号(+)显示所选文件夹的内容
NUMLOCK+数字键盘的星号(*)显示所选文件夹的所有子文件夹
向左键当前所选项处于展开状态时折叠该项,或选定其父文件夹
向右键当前所选项处于折叠状态时展开该项,或选定第一个子文件夹
自然键盘
【窗口】显示或隐藏“开始”菜单
【窗口】+F1帮助
【窗口】+D显示桌面
【窗口】+R打开“运行”
【窗口】+E打开“我的电脑”
【窗口】+F搜索文件或文件夹
【窗口】+U打开“工具管理器”
【窗口】+BREAK显示“系统属性”
【窗口】+TAB在打开的项目之间切换
辅助功能
按右边的SHIFT键八秒钟切换筛选键的开和关
按SHIFT五次切换粘滞键的开和关
按NUMLOCK五秒钟切换切换键的开和关
左边的ALT+左边的SHIFT+NUMLOCK切换鼠标键的开和关
左边的ALT+左边的SHIFT+PRINTSCREEN切换高对比度的开和关
运行
按“开始”-“运行”,或按WIN键+R,在『运行』窗口中输入:
(按英文字符顺序排列)
%temp%———打开临时文件夹
.————–C:\DocumentsandSettings\用户名所在文件夹
..————-C:\DocumentsandSettings
…————我的电脑
\————–C盘
appwize.cpl—-添加、删除程序
access.cpl—–辅助功能选项
Accwiz———辅助功能向导
cmd————CMD命令提示符
command——–CMD命令提示符
chkdsk.exe—–Chkdsk磁盘检查
certmgr.msc—-证书管理实用程序
calc———–启动计算器
charmap——–启动字符映射表
cintsetp——-仓颉拼音输入法
cliconfg——-SQLSERVER客户端网络实用程序
clipbrd——–剪贴板查看器
control——–打开控制面板
conf———–启动netmeeting
compmgmt.msc—计算机管理
cleanmgr——-垃圾整理
ciadv.msc——索引服务程序
dcomcnfg——-打开系统组件服务
ddeshare——-打开DDE共享设置
dxdiag———检查DirectX信息
drwtsn32——-系统医生
devmgmt.msc—-设备管理器
desk.cpl——-显示属性
dfrg.msc——-磁盘碎片整理程序
diskmgmt.msc—磁盘管理实用程序
dvdplay——–DVD播放器
eventvwr——-事件查看器
eudcedit——-造字程序
explorer——-打开资源管理器
fsmgmt.msc—–共享文件夹管理器
firewall.cpl—WINDOWS防火墙
gpedit.msc—–组策略
hdwwiz.cpl—–添加硬件
iexpress——-木马捆绑工具,系统自带
inetcpl.cpl—-INTETNET选项
intl.cpl——-区域和语言选项(输入法选项)
irprops.cpl—-无线链接
joy.cpl——–游戏控制器
lusrmgr.msc—-本机用户和组
logoff———注销命令
main.cpl——-鼠标
mem.exe——–显示内存使用情况
migwiz———文件转移向导
mlcfg32.cpl—-邮件
mplayer2——-简易widnowsmediaplayer
mspaint——–画图板
msconfig.exe—系统配置实用程序
mstsc———-远程桌面连接
magnify——–放大镜实用程序
mmc————打开控制台
mmsys.cpl——声音和音频设备
mobsync——–同步命令
ncpa.cpl——-网络连接
nslookup——-IP地址侦测器
netstartX—-开始X服务
netstopX—–停止X服务
netstat-an—-命令检查接口
netsetup.cpl—无线网络安装向导
notepad——–打开记事本
nslookup——-IP地址侦探器
narrator——-屏幕“讲述人”
ntbackup——-系统备份和还原
ntmsmgr.msc—-移动存储管理器
ntmsoprq.msc—移动存储管理员操作请求
nusrmgr.cpl—-用户账户
nwc.cpl——–NetWare客户服务
osk————打开屏幕键盘
odbcad32——-ODBC数据源管理器
odbccp32.cpl—ODBC数据源管理器
oobe/msoobe/a-检查XP是否激活
packager——-对象包装程序
perfmon.msc—-计算机性能监测程序
powercfg.cpl—电源选项
progman——–程序管理器
regedit——–注册表
rsop.msc——-组策略结果集
regedt32——-注册表编辑器
regsvr32/?—-调用、卸载DLL文件运行(详细请在cmd中输入regsvr32/?)
sapi.cpl——-语音
services.msc—本地服务设置
syncapp——–创建一个公文包
sysedit——–系统配置编辑器
sigverif——-文件签名验证程序
sndrec32——-录音机
sndvol32——-音量控制程序
shrpubw——–共享文件夹设置工具
secpol.msc—–本地安全策略
sysdm.cpl——系统
syskey———系统加密(一旦加密就不能解开,保护windowsxp系统的双重密码)
services.msc—本地服务设置
sfc.exe——–系统文件检查器
sfc/scannow—windows文件保护
shutdown——-关机命令(详细请在cmd中输入shutdown/?)
taskmgr——–任务管理器
telephon.cpl—电话和调制解调器选项
telnet———远程连接程序
timedate.cpl—日期和时间
tourstart——xp简介(安装完成后出现的漫游xp程序)
tsshutdn——-60秒倒计时关机命令
utilman——–辅助工具管理器
winver———检查Windows版本
winmsd———系统信息
wiaacmgr——-扫描仪和照相机向导
winchat——–XP自带局域网聊天
wmimgmt.msc—-打开windows管理体系结构(WMI)
wordpad——–写字板
wuaucpl.cpl—-自动更新
wupdmgr——–windows更新程序
write———-写字板
wscript——–windows脚本宿主设置
wscui.cpl——安全中心
C:/windows/fonts字体
hcp://services/centers/homepage帮助和支持
两个PHP冷门函数的简要使用
相信你在使用Google或者Baidu搜索的时候,肯定碰到过他们的关键词提示。
对于搜索引擎来说,他们有一整套分词技术及完整的词库。而对于一般简单的PHP应用来说,做到这种完善的分词又是很困难的。
其实php中有两个函数,可以近似的完成这样的功能。
这两个函数就是:levenshtein 和 similar_text
以下分别是这两个函数的官方解释:
http://www.php.net/manual/en/function.levenshtein.php
http://www.php.net/manual/en/function.similar-text.php
我们来简单看一下使用这两个函数的效果。
echo levenshtein(“ubuntu”,”ubuntw”);
echo “<br>”;
echo levenshtein(“ubuntu”,”aubvntu”);
echo “<br>”;
echo levenshtein(“ubuntu”,”vbvntw”);
echo “<br>”;
echo levenshtein(“ubuntu”,”ubuntu”);
这段代码的输出是:
1
2
3
0
也就是说,对于levenshtein函数,两个字符相似度越高,其返回值越小,如果相等,则函数返回0。
再来看看similar_text函数
similar_text(“ubuntu”,”ubuntw”,$a);
echo $a;
echo “<br>”;
similar_text(“ubuntu”,”aubvntu”,$a);
echo $a;
echo “<br>”;
similar_text(“ubuntu”,”vbvntw”,$a);
echo $a;
echo “<br>”;
similar_text(“ubuntu”,”ubuntu”,$a);
echo $a;
代码输出:
83.333333333333
76.923076923077
50
100
与levenshtein相反,similar_text则是相似度越高,其值越大,如果相等,则返回100。
了解了这两个函数的用法,我们可以通过这两个函数来达成类似最开始Google的那种效果了。当然还得有一些技术前提,
比如在某些CMS中,像DedeCMS,它本身维护了一个关键词的数据表,这样我们在每次搜索的时候,可以使用上面两个
函数对DedeCMS的关键词表进行逐一匹配,然后设定一个匹配限制,如果大于(小于)该值,则可以给出类似Google那样
的提示了。
网站之MySQL 索引分析和优化
一、什么是索引?
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。
假设我们创建了一个名为people的表:
CREATE TABLE people ( peopleid SMALLINT NOT NULL, name CHAR(50) NOT NULL );
然后,我们完全随机把1000个不同name值插入到people表。下图显示了people表所在数据文件的一小部分:
可以看到,在数据文件中name列没有任何明确的次序。如果我们创建了name列的索引,MySQL将在索引中排序name列:
对于索引中的每一项,MySQL在内部为它保存一个数据文件中实际记录所在位置的“指针”。因此,如果我们要查找name等于“Mike”记录的peopleid(SQL命令为“SELECT peopleid FROM people WHERE name=’Mike’;”),MySQL能够在name的索引中查找“Mike”值,然后直接转到数据文件中相应的行,准确地返回该行的peopleid(999)。在这个过程中,MySQL只需处理一个行就可以返回结果。如果没有“name”列的索引,MySQL要扫描数据文件中的所有记录,即1000个记录!显然,需要MySQL处理的记录数量越少,则它完成任务的速度就越快。
二、索引的类型
MySQL提供多种索引类型供选择:
普通索引
这是最基本的索引类型,而且它没有唯一性之类的限制。普通索引可以通过以下几种方式创建:
创建索引,例如CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
唯一性索引
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。唯一性索引可以用以下几种方式创建:
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] [...]
MYSQL列类型选择与MYSQL查询效率
要选择有助于使查询执行更快的列,应遵循如下规则(这里,“BLOB 类型”应该理解为即包含B L O B也包含TEXT 类型):
■ 使用定长列,不使用可变长列。这条准则对被经常修改,从而容易产生碎片的表来说特别重要。例如,应该选择CHAR 列而不选择VARCHAR 列。所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种空间的耗费,使用定长行将比使用可变长的行处理快得多。
■ 在较短的列能够满足要求时不要使用较长的列。如果正使用的是定长的CHAR 列,应该使它们尽量短。如果列中所存储的最长值为40 个字符,那么就不要将其定义为CHAR ( 2 5 5 );只要定义为CHAR(40) 即可。如果能够使用MEDIUMINT 而不是BIGINT,表将会更小(磁盘I/O 也较少),其值在计算中也可以处理得更快。
■ 将列定义为NOT NULL。这样处理更快,所需空间更少。而且有时还能简化查询,因为不需要检查是否存在特例NULL。
■ 考虑使用ENUM 列。如果有一个只含有限数目的特定值的列,那么应该考虑将其转换为ENUM 列。ENUM 列的值可以更快地处理,因为它们在内部是以数值表示的。
■ 使用PROCEDURE ANALYSE( )。如果使用的是MySQL3.23 或更新的版本,应该执行PROCEDURE ANALYSE( ),查看它所提供的关于表中列的信息:
相应输出中有一列是关于表中每列的最佳列类型的建议。第二个例子要求PROCEDURE ANALYSE( ) 不要建议含有多于16 个值或取多于256 字节的ENUM 类型(可根据需要更改这些值)。如果没有这样的限制,输出可能会很长;ENUM 的定义也会很难阅读。根据PROCEDURE ANALYSE( ) 的输出,会发现可以对表进行更改以利用更有效的类型。如果希望更改值类型,使用ALTER TABLE 语句即可。
■ 将数据装入B L O B。用BLOB [...]
PHP function : preg_match_all
<?php
/*
preg_match_all – Perform a global regular expression match.
int preg_match_all (string $pattern , string $subject , array &$matches [ , int $flags [ , int $offset]])
Search $subject for all matches to the regular expression given in $pattern and put them in $matches in the order specified by $flags.
After the first match is found , the subsequent [...]
php正则表达式专题
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
这里有一些可能会遇到的正则表达式示例:
Visual Basic Scripting Edition
VBScript
匹配
/^\[ \t]*$/
“^\[ \t]*$”
匹配一个空白行。
/\d{2}-\d{5}/
“\d{2}-\d{5}”
验证一个ID 号码是否由一个2位数字,一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/
“<(.*)>.*<\/\1>”
匹配一个 HTML 标记。
下表是元字符及其在正则表达式上下文中的行为的一个完整列表:
字符
描述
\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后向引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 “\” 而 “\(” 则匹配 “(“。
^
匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$
匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
*
匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。 * 等价于{0,}。
+
匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
?
匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” [...]
优化PHP代码的40条建议
优化PHP代码的40条建议
40 Tips for optimizing your php Code
原文地址:http://reinholdweber.com/?p=3
英文版权归Reinhold Weber所有,中译文作者yangyang(aka davidkoree)。双语版可用于非商业传播,但须注明英文版作者、版权信息,以及中译文作者。翻译水平有限,请广大PHPer指正。
1. If a method can be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。
2. echo is faster than print. echo 比 print 快。
3. Use echo’s multiple parameters instead of string concatenation. 使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。
4. Set the maxvalue for your for-loops before and not in [...]
MySQL中代替Like语句的另一种写法
如查找用户名包含有”c”的所有用户, 可以用
use mydatabase
select * from table1 where username like’%c%”
下面是完成上面功能的另一种写法:
use mydatabase
select * from table1 where charindex(‘c’,username)>0
这种方法理论上比上一种方法多了一个判断语句,即>0, 但这个判断过程是最快的, 我想信80%以上的运算都是花在查找字
符串及其它的运算上, 所以运用charindex函数也没什么大不了. 用这种方法也有好处, 那就是对%,|等在不能直接用like
查找到的字符中可以直接在这charindex中运用, 如下:
use mydatabase
select * from table1 where charindex(‘%’,username)>0
也可以写成:
use mydatabase
select * from table1 where charindex(char(37),username)>0
ASCII的字符即为%
你应该知道的PHP十件事
1.使用ip2long() 和long2ip()函数来把IP地址转化成整型存储到数据库里。
这种方法把存储空间降到了接近四分之一(char(15)的15个字节对整形的4个字节),计算一个特定的地址是不是在一个区段内也更简单了,而且加快了搜索和排序的速度(虽然有时仅仅是快了一点)。
2.在验证Email地址的时候使用checkdnsrr() 函数验证域名是否存在。
这个内置函数能够确认指定的域名能够解析成IP地址。该函数的PHP 文档的用户评论部分有一个简单的用户自定义函数,这个函数基于checkdnsrr(),用来验证 email 地址的合法性。对于那些认为自己的Email地址是user@www163.com而不是user@163.com的家伙们,这个方法可以很方便的抓住他们。
3.如果你使用的是PHP 5和MySQL 4.1 或者更高的版本,考虑用mysqli_* 系列函数。
一个很好的功能就是你可以使用预处理语句,如果你在维护一个数据库密集型站点,这个功能能够加快查询速度。一些评估分数。
4.学会爱上三元运算符。
5.如果你在项目中感觉到有可复用的部分,在你写下一行代码前先看看PEAR中是否已经有了。
很多PHP程序员都知道 PEAR 是一个很好的资源库,虽然还有很多程序员不知道。这个在线资源库包含了超过400个可以复用的程序片段,这些程序片段你可以立即用刀你的程序里。除非说你的项目真的是非常特别的,你总能找到帮你节省时间的 PEAR包。
6.用 highlight_file()来自动的打印出格式化的很漂亮的源代码。
如果你在留言板、IRC 这些地方寻求一个脚本的帮助的话,这个函数用起来非常的顺手。当然了,要小心不要意外的泄露出你的数据库连接信息和密码等。
7.使用 error_reporting(0)函数来防止用户看到潜在的敏感错误信息。
在理想情况下,发布服务器应该在php.ini 里完全禁止。但是如果你用的是一个共享的 web 服务器的话,你没有自己的 php.ini 文件,那么这种情况下你最好的选择就是在所有脚本的第一行前加上 error_reporting(0);(或者使用 require_once() 方法)。这就能够在出错的时候完全屏蔽敏感的SQL查询语句和路径名。
8.在网数据库中存储很大的字符串之前使用 gzcompress() 和 gzuncompress() 来显式的压缩/解压字符串。
这个PHP内置函数使用 gzip 算法,可以压缩普通文本达 90%。在我每次要读写BLOB类型的字段的时候都使用这些函数。唯一额例外就是当我需要全文检索的时候。
9.通过“引用”传递参数的方法从一个函数中得到多个返回值。
就像三元运算符一样,大部分受过正式编程训练的程序员都知道这个技巧。但是那些 HTML 背景大于 Pascal 背景的程序员都或多或少的有过这样的疑问“在仅能使用一次 return 的情况下,从一个函数里返回多个值?”答案就是在变量前加上一个 “&” 符号,通过“引用”传递而非“值”传递。
10.完全理解“魔术引号”和 SQL 注入的危险性。