当前位置: 编程技术>php
本页文章导读:
▪批量修改RAR文件注释的php代码
我们打开WINRAR的帮助文件,帮助文件中提到了在命令行模式下修改RAR文件注释及添加压缩文档的两个参数分别为A\C,WINRAR的说明文件如下: 从当前文件夹添加全部 *.hlp 文件到压缩文件 help.rar 中.........
▪为PHP初学者的8点有效建议
学习一门新语言可能会是一件很艰巨的任务,最好的办法就是借鉴前辈的经验已达到事半功倍,下面就是为PHP新手们准备的一些经验餐( 笔者也还是新手)。 如果你是个PHP开发者,无论.........
▪PHP程序员最常犯的11个MySQL错误小结
对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面列举了我曾经犯过的最严重.........
[1]批量修改RAR文件注释的php代码
来源: 互联网 发布时间: 2013-11-30
我们打开WINRAR的帮助文件,帮助文件中提到了在命令行模式下修改RAR文件注释及添加压缩文档的两个参数分别为A\C,WINRAR的说明文件如下:
从当前文件夹添加全部 *.hlp 文件到压缩文件 help.rar 中
WinRAR a help *.hlp
从文件添加注释可以使用 -z<文件> 开关。
WinRAR c -zinfo.txt dummy
这样,我们就可以通过PHP调用CMD,运行上述两个WINRAR参数来做到批量修改RAR文件的注释及添加压缩包的文件.需要注意的是,PHP在安全模式打开的情况下是不能直接调用CMD的.
下面的代码就是我通过我的数据库读取出文件路径并最终实现批量修改RAR文件注释的方法.因为数据库是ACCESS,我新建了一个ODBC源.同时RAR.exe及CMD.EXE都在1.PHP同目录下
<?
$id=$_GET[id];
if($id=="")
{
echo "参数错误";
exit;
}
if($id>=400)
{
echo "全部结束";
exit;
}
$db=odbc_connect("dw","","");
$sql="select * from 'download' where 'id'=$id";
$query=odbc_exec($db,$sql);
$filename=odbc_result($query,2);
if($filename=="")
{
}
$filename=str_replace("#1″,"",$filename);
$filename=str_replace("#2″,"",$filename);
$filename="soft/".$filename;
echo $filename."<br>";
if(!file_exists($filename))
{
echo "文件不存在,转到下一个ID";
$id++;
echo "<META HTTP-EQUIV='Refresh'
CONTENT='0;URL=../test/1.php?id=$id'>";
exit;
}//读出文件名,并检查文件是否存在
else
{
'WinRAR a $filename 使用说明.txt';
echo "插入说明文件成功";
$id++;
echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=../test/1.php?id=$id'>";
}
odbc_close($db);
?>
××××××××××××××××××××
最近采集流行,可能许多朋友都尝试通过采集数据来建设一个内容丰富完善的站点.
可是,在某些时候我们通常采集得到的RAR文件都被批量加了注释,这个时候如果将这些数据放到自己的站上无异于为人家做广告.
最近我也碰到了这样的问题,为此大伤脑筋,后来仔细的翻看WINRAR的帮助文件发现我们可以通过下面的方法来做到批量修改.
我们打开WINRAR的帮助文件,帮助文件中提到了在命令行模式下修改RAR文件注释及添加压缩文档的两个参数分别为A\C,WINRAR的说明文件如下:
从当前文件夹添加全部 *.hlp 文件到压缩文件 help.rar 中
WinRAR a help *.hlp
从文件添加注释可以使用 -z<文件> 开关。
WinRAR c -zinfo.txt dummy
这样,我们就可以通过PHP调用CMD,运行上述两个WINRAR参数来做到批量修改RAR文件的注释及添加压缩包的文件.需要注意的是,PHP在安全模式打开的情况下是不能直接调用CMD的.
下面的代码就是我通过我的数据库读取出文件路径并最终实现批量修改RAR文件注释的方法.因为数据库是ACCESS,我新建了一个ODBC源.RAR.EXE及CMD.EXE都在1.PHP的相同目录下
<?
$id=$_GET[id];
if($id=="")
{
echo "参数错误";
exit;
}
if($id>=400)
{
echo "全部结束";
exit;
}
$db=odbc_connect("dw","","");
$sql="select * from 'download' where 'id'=$id";
$query=odbc_exec($db,$sql);
$filename=odbc_result($query,2);
if($filename=="")
{
}
$filename=str_replace("#1″,"",$filename);
$filename=str_replace("#2″,"",$filename);
$filename="soft/".$filename;
echo $filename."<br>";
if(!file_exists($filename))
{
echo "文件不存在,转到下一个ID";
$id++;
echo "<META HTTP-EQUIV='Refresh'
CONTENT='0;URL=../test/1.php?id=$id'>";
exit;
}//读出文件名,并检查文件是否存在
else
{
'WinRAR a $filename 使用说明.txt';
echo "插入说明文件成功";
$id++;
echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=../test/1.php?id=$id'>";
}
odbc_close($db);
?>
从当前文件夹添加全部 *.hlp 文件到压缩文件 help.rar 中
WinRAR a help *.hlp
从文件添加注释可以使用 -z<文件> 开关。
WinRAR c -zinfo.txt dummy
这样,我们就可以通过PHP调用CMD,运行上述两个WINRAR参数来做到批量修改RAR文件的注释及添加压缩包的文件.需要注意的是,PHP在安全模式打开的情况下是不能直接调用CMD的.
下面的代码就是我通过我的数据库读取出文件路径并最终实现批量修改RAR文件注释的方法.因为数据库是ACCESS,我新建了一个ODBC源.同时RAR.exe及CMD.EXE都在1.PHP同目录下
代码如下:
<?
$id=$_GET[id];
if($id=="")
{
echo "参数错误";
exit;
}
if($id>=400)
{
echo "全部结束";
exit;
}
$db=odbc_connect("dw","","");
$sql="select * from 'download' where 'id'=$id";
$query=odbc_exec($db,$sql);
$filename=odbc_result($query,2);
if($filename=="")
{
}
$filename=str_replace("#1″,"",$filename);
$filename=str_replace("#2″,"",$filename);
$filename="soft/".$filename;
echo $filename."<br>";
if(!file_exists($filename))
{
echo "文件不存在,转到下一个ID";
$id++;
echo "<META HTTP-EQUIV='Refresh'
CONTENT='0;URL=../test/1.php?id=$id'>";
exit;
}//读出文件名,并检查文件是否存在
else
{
'WinRAR a $filename 使用说明.txt';
echo "插入说明文件成功";
$id++;
echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=../test/1.php?id=$id'>";
}
odbc_close($db);
?>
××××××××××××××××××××
最近采集流行,可能许多朋友都尝试通过采集数据来建设一个内容丰富完善的站点.
可是,在某些时候我们通常采集得到的RAR文件都被批量加了注释,这个时候如果将这些数据放到自己的站上无异于为人家做广告.
最近我也碰到了这样的问题,为此大伤脑筋,后来仔细的翻看WINRAR的帮助文件发现我们可以通过下面的方法来做到批量修改.
我们打开WINRAR的帮助文件,帮助文件中提到了在命令行模式下修改RAR文件注释及添加压缩文档的两个参数分别为A\C,WINRAR的说明文件如下:
从当前文件夹添加全部 *.hlp 文件到压缩文件 help.rar 中
WinRAR a help *.hlp
从文件添加注释可以使用 -z<文件> 开关。
WinRAR c -zinfo.txt dummy
这样,我们就可以通过PHP调用CMD,运行上述两个WINRAR参数来做到批量修改RAR文件的注释及添加压缩包的文件.需要注意的是,PHP在安全模式打开的情况下是不能直接调用CMD的.
下面的代码就是我通过我的数据库读取出文件路径并最终实现批量修改RAR文件注释的方法.因为数据库是ACCESS,我新建了一个ODBC源.RAR.EXE及CMD.EXE都在1.PHP的相同目录下
代码如下:
<?
$id=$_GET[id];
if($id=="")
{
echo "参数错误";
exit;
}
if($id>=400)
{
echo "全部结束";
exit;
}
$db=odbc_connect("dw","","");
$sql="select * from 'download' where 'id'=$id";
$query=odbc_exec($db,$sql);
$filename=odbc_result($query,2);
if($filename=="")
{
}
$filename=str_replace("#1″,"",$filename);
$filename=str_replace("#2″,"",$filename);
$filename="soft/".$filename;
echo $filename."<br>";
if(!file_exists($filename))
{
echo "文件不存在,转到下一个ID";
$id++;
echo "<META HTTP-EQUIV='Refresh'
CONTENT='0;URL=../test/1.php?id=$id'>";
exit;
}//读出文件名,并检查文件是否存在
else
{
'WinRAR a $filename 使用说明.txt';
echo "插入说明文件成功";
$id++;
echo "<META HTTP-EQUIV='Refresh' CONTENT='0;URL=../test/1.php?id=$id'>";
}
odbc_close($db);
?>
[2]为PHP初学者的8点有效建议
来源: 互联网 发布时间: 2013-11-30
学习一门新语言可能会是一件很艰巨的任务,最好的办法就是借鉴前辈的经验已达到事半功倍,下面就是为PHP新手们准备的一些经验餐( 笔者也还是新手)。
如果你是个PHP开发者,无论是新手还是高手,笔者都希望你能在此讨论下自己对PHP的想法或者技巧。
1. 从OOP开始
Naramore是SourceForge员工以及PHPWomen.org的创办人。对于初学者,她建议在学PHP之前先了解清楚OOP(Object-Oriented Programming)即面向对象编程思想。
“如果你来自非高科技行业,很有必要花一些时间去学习软件开发的基础流程。例如面向对象程序设计、测试驱动开发、版本控制、 调试、设计模式等。”
“如果你已经尝试过了但无法解决问题,不要害怕开口问人。很多PHP社区的气氛都是非常友好的,并且提供了大量初学者可用得上 的资源,这些都你来说都会大有帮助的。找一个适合自己的稳定的社区,一个本地用户组或一个开源项目社区,或者是一个freenode上的相关 IRC聊天频道。”
2. 随时Google
Casey创立了一个软件商店,并且在unconference流程方面做了很多研究。
他的建议是在PHP社区找到自己的位置以及遵循“发问前先Google一下”。
“马上找到一个用户组加入,全世界有很多聪明的人聚集一起聊天、开拓思路、互相帮助的PHP群。”
“记住,在提问之前先尝试在google上搜索。没人喜欢懒惰的人。”
3. 加入开源项目
Leonard 在运营一家爱尔兰软件公司echolibre,同时还是CloudSplit(一个云计算分析服务)的联合创始人。和他的很多同龄人一样,他建 议应该积极尝试加入开源项目,即使你是个新手。
“通过参加开源项目你有机会看到那些源代码,并可以向资深的前辈学习。”
“帮助开源项目团队做一些事,例如寻找和记录重复性的bug这样的耗时任务,他们会对你心存感激。当我们想要雇用开发人员时, 如果他曾经参与过OSS项目,我们会更多地考虑他对公司的潜在贡献。”
4. 想了就做
Lornajane 他在网上的身份Mitchell更为出名,是一个PHP顾问、开发者、作家和演说家。
她给出了一句简短的建议:想了就做。
“PHP是一种非常易懂、可以进行快速开发的语言。想知道一件事是否可行的最佳方法就是去做这件事。”
“任何人都可以用PHP编程。低门槛意味着会有很多糟糕的PHP作品。但很多糟糕的PHP作品却是非常有用的,即使它看起来并不漂亮 。我个人认为如果你能用PHP解决问题,就大胆去实行,即便做出来的东西可能并不完美。”
5. 避免编码倦怠
Cornutt 运营PHPDeveloper.org和Joind.in,他从1998年开始一直在使用PHP。他给PHP初学者的建议是千万不要产生编码疲劳和倦怠。
“我认为新手PHP开发人员很容易陷入一种不堪重负的境地...初学者往往是对语言有兴趣,但总是被一种“能运行即可” 的心态误导,以至事倍功半。”
“试图找到一位导师来引导你进行这些初步的学习步骤。当你真正去同他人沟通时,会发现世界很多不同的东西。IRC是一个很好的 选择,但找一个牛人做老师肯定是最佳选择。"
“PHP开发也是一种需要磨练的技能,没人可以在一夜之间变成一名高手。”
6. 选择一个好用的编码器
Turner 从1996年开始一直在做web相关工作和参加开源项目。他运营PHPKitchen.com,最近还杀入Seedcamp决赛。
他给了新手PHP开发人员一个非常好的建议,可以节省时间,写出更好的代码,并帮助维持你对编码的兴趣。
“阅读经验丰富的开发者的代码,你总会发现一些更好、更简洁的方式算法。不要重新发明轮子,使用库可以避免自己编写重复的代 码。"
“确保你的代码是人类可读的,如果你的代码6个月后连你自己也看不懂了,你让合作的其他开发者如何去看?"
“尽量简化接口,写简单的代码难度更大,不过,良好的重构会为维护节省大量的时间和头痛。"
“最后,了解一些杰出的程序员以及他们如何多年保持对编程艺术的热情。”
7. 了解测试驱动开发、封装和代码控制
Herbert 从1999年一直玩PHP至今,他对Gentoo Linux作出很大的贡献。
对于PHP初学者,他说“学习测试驱动开发和封装。一旦你熟悉它,你代码会写的更快,而且继承你代码的人肯定会感谢你”。
“学会代码控制,这是必经之路。”
他还表示,PHP一个最大的优势是有大量的在线免费文档,不用像学其他某些语言一样,跑到街上的书店去买教程。
8. 了解安全问题
Maclean 是来自苏格兰的PHP和Python开发者。
他说:“正因为PHP易用性强,所以有很多人都在使用,但我们必须想想那些初学者在用它做些什么。没必要什么都从头开始写起, 适当地选择使用框架是个很好的开始。”
“另外要做的是了解有关安全的问题。PHP曾经在安全性上臭名远扬,就是因为易用性带来的副作用。我们必须学会避开这些问题。
如果你是个PHP开发者,无论是新手还是高手,笔者都希望你能在此讨论下自己对PHP的想法或者技巧。
1. 从OOP开始
Naramore是SourceForge员工以及PHPWomen.org的创办人。对于初学者,她建议在学PHP之前先了解清楚OOP(Object-Oriented Programming)即面向对象编程思想。
“如果你来自非高科技行业,很有必要花一些时间去学习软件开发的基础流程。例如面向对象程序设计、测试驱动开发、版本控制、 调试、设计模式等。”
“如果你已经尝试过了但无法解决问题,不要害怕开口问人。很多PHP社区的气氛都是非常友好的,并且提供了大量初学者可用得上 的资源,这些都你来说都会大有帮助的。找一个适合自己的稳定的社区,一个本地用户组或一个开源项目社区,或者是一个freenode上的相关 IRC聊天频道。”
2. 随时Google
Casey创立了一个软件商店,并且在unconference流程方面做了很多研究。
他的建议是在PHP社区找到自己的位置以及遵循“发问前先Google一下”。
“马上找到一个用户组加入,全世界有很多聪明的人聚集一起聊天、开拓思路、互相帮助的PHP群。”
“记住,在提问之前先尝试在google上搜索。没人喜欢懒惰的人。”
3. 加入开源项目
Leonard 在运营一家爱尔兰软件公司echolibre,同时还是CloudSplit(一个云计算分析服务)的联合创始人。和他的很多同龄人一样,他建 议应该积极尝试加入开源项目,即使你是个新手。
“通过参加开源项目你有机会看到那些源代码,并可以向资深的前辈学习。”
“帮助开源项目团队做一些事,例如寻找和记录重复性的bug这样的耗时任务,他们会对你心存感激。当我们想要雇用开发人员时, 如果他曾经参与过OSS项目,我们会更多地考虑他对公司的潜在贡献。”
4. 想了就做
Lornajane 他在网上的身份Mitchell更为出名,是一个PHP顾问、开发者、作家和演说家。
她给出了一句简短的建议:想了就做。
“PHP是一种非常易懂、可以进行快速开发的语言。想知道一件事是否可行的最佳方法就是去做这件事。”
“任何人都可以用PHP编程。低门槛意味着会有很多糟糕的PHP作品。但很多糟糕的PHP作品却是非常有用的,即使它看起来并不漂亮 。我个人认为如果你能用PHP解决问题,就大胆去实行,即便做出来的东西可能并不完美。”
5. 避免编码倦怠
Cornutt 运营PHPDeveloper.org和Joind.in,他从1998年开始一直在使用PHP。他给PHP初学者的建议是千万不要产生编码疲劳和倦怠。
“我认为新手PHP开发人员很容易陷入一种不堪重负的境地...初学者往往是对语言有兴趣,但总是被一种“能运行即可” 的心态误导,以至事倍功半。”
“试图找到一位导师来引导你进行这些初步的学习步骤。当你真正去同他人沟通时,会发现世界很多不同的东西。IRC是一个很好的 选择,但找一个牛人做老师肯定是最佳选择。"
“PHP开发也是一种需要磨练的技能,没人可以在一夜之间变成一名高手。”
6. 选择一个好用的编码器
Turner 从1996年开始一直在做web相关工作和参加开源项目。他运营PHPKitchen.com,最近还杀入Seedcamp决赛。
他给了新手PHP开发人员一个非常好的建议,可以节省时间,写出更好的代码,并帮助维持你对编码的兴趣。
“阅读经验丰富的开发者的代码,你总会发现一些更好、更简洁的方式算法。不要重新发明轮子,使用库可以避免自己编写重复的代 码。"
“确保你的代码是人类可读的,如果你的代码6个月后连你自己也看不懂了,你让合作的其他开发者如何去看?"
“尽量简化接口,写简单的代码难度更大,不过,良好的重构会为维护节省大量的时间和头痛。"
“最后,了解一些杰出的程序员以及他们如何多年保持对编程艺术的热情。”
7. 了解测试驱动开发、封装和代码控制
Herbert 从1999年一直玩PHP至今,他对Gentoo Linux作出很大的贡献。
对于PHP初学者,他说“学习测试驱动开发和封装。一旦你熟悉它,你代码会写的更快,而且继承你代码的人肯定会感谢你”。
“学会代码控制,这是必经之路。”
他还表示,PHP一个最大的优势是有大量的在线免费文档,不用像学其他某些语言一样,跑到街上的书店去买教程。
8. 了解安全问题
Maclean 是来自苏格兰的PHP和Python开发者。
他说:“正因为PHP易用性强,所以有很多人都在使用,但我们必须想想那些初学者在用它做些什么。没必要什么都从头开始写起, 适当地选择使用框架是个很好的开始。”
“另外要做的是了解有关安全的问题。PHP曾经在安全性上臭名远扬,就是因为易用性带来的副作用。我们必须学会避开这些问题。
[3]PHP程序员最常犯的11个MySQL错误小结
来源: 互联网 发布时间: 2013-11-30
对于很多新手们来说,使用PHP可以在短短几个小时之内轻松地写出具有特定功能的代码。但是,构建一个稳定可靠的数据库却需要花上一些时日和相关技能。下面列举了我曾经犯过的最严重的11个MySQL相关的错误(有些同样也反映在其他语言/数据库的使用上)。。。
1、使用MyISAM而不是InnoDB
MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。
MySQL默认使用的是MyISAM。但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库。外键约束或者事务处理对于数据完整性是非常重要的,但MyISAM都不支持这些。另外,当有一条记录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率。
结论很简单:使用InnoDB。
2、使用PHP的mysql函数
PHP自产生之日就提供了MySQL库函数(or near as makes no difference)。很多应用仍然在使用类似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,尽管PHP手册上说:
如果你在使用MySQL v4.1.3或者更新版本,强烈推荐使用您使用mysqli扩展。
mysqli(MySQL的加强版扩展)有以下几个优点:
可选的面向对象接口
prepared表达式,这有利于阻止SQL注入攻击,还能提高性能
支持更多的表达式和事务处理
另外,如果你想支持多种数据库系统,你还可以考虑PDO。
3、没有处理用户输入
这或者可以这样说#1:永远不要相信用户的输入。用服务器端的PHP验证每个字符串,不要寄希望与JavaScript。最简单的SQL注入攻击会利用如下的代码:
$username = $_POST["name"];
$password = $_POST["password"];
$sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";
// run query...
只要在username字段输入“admin';--”,这样就会被黑到,相应的SQL语句如下:
SELECT userid FROM usertable WHERE username='admin';
狡猾的黑客可以以admin登录,他们不需要知道密码,因为密码段被注释掉了。
4、没有使用UTF-8
美国、英国和澳大利亚的我们很少考虑除英语之外的其他语言。我们很得意地完成了自己的“杰作”却发现它们并不能在其他地方正常运行。
UTF-8解决了很多国际化问题。虽然在PHP v6.0之前它还不能很好地被支持,但这并不影响你把MySQL字符集设为UTF-8。
5、相对于SQL,偏爱PHP
如果你接触MySQL不久,那么你会偏向于使用你已经掌握的语言来解决问题,这样会导致写出一些冗余、低效率的代码。比如,你不会使用MySQL自带的AVG()函数,却会先对记录集中的值求和然后用PHP循环来计算平均值。
此外,请注意PHP循环中的SQL查询。通常来说,执行一个查询比在结果中迭代更有效率。
所以,在分析数据的时候请利用数据库系统的优势,懂一些SQL的知识将大有裨益。
6、没有优化数据库查询
99%的PHP性能问题都是由数据库引起的,仅仅一个糟糕的SQL查询就能让你的web应用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助你找出这些万恶的SELECT。
7、不能正确使用数据类型
MySQL提供了诸如numeric、string和date等的数据类型。如果你想存储一个时间,那么使用DATE或者DATETIME类型。如果这个时候用INTEGER或者STRING类型的话,那么将会使得SQL查询非常复杂,前提是你能使用INTEGER或者STRING来定义那个类型。
很多人倾向于擅自自定义一些数据的格式,比如,使用string来存储序列化的PHP对象。这样的话数据库管理起来可能会变得简单些,但会使得MySQL成为一个糟糕的数据存储而且之后很可能会引起故障。
8、在查询中使用*
永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你需要的数据。就算你需要所有字段,你的数据表也不可避免的会产生变化。
9、不使用索引或者过度使用索引
一般性原则是这样的:select语句中的任何一个where子句表示的字段都应该使用索引。
举个例子,假设我们有一个user表,包括numeric ID(主键)和email address。登录的时候,MySQL必须以一个email为依据查找正确的ID。如果使用了索引的话(这里指email),那么MySQL就能够使用更快的搜索算法来定位email,甚至可以说是即时实现。否则,MySQL就只能顺序地检查每一条记录直到找到正确的email address。
有的人会在每个字段上都添加索引,遗憾的是,执行了INSERT或者UPDATE之后这些索引都需要重新生成,这样就会影响性能。所以,只在需要的时候添加索引。
10、忘记备份!
虽然比较罕见,但是数据库还是有崩溃的危险。硬盘有可能损坏,服务器有可能崩溃,web主机提供商有可能会破产!丢失MySQL数据将会是灾难性的,所以请确保你已经使用了自动备份或者已经复制到位。
11、Bonus mistake-不考虑使用其他数据库
对于PHP开发人员来说,MySQL可能是使用最广泛的数据库系统,但并不是唯一的选择。PostgreSQL和Firebird是最强有力的竞争者:这个两者都是开源的,而且都没有被公司收购。微软提供了SQL server Express,甲骨文提供了10g Express,这两者都是企业级数据库的免费版本。有时候,对于一个较小的web应用或者嵌入式应用,SQLite也不失为一个可行的替代方案。
1、使用MyISAM而不是InnoDB
MySQL有很多数据库引擎,但是你最可能碰到的就是MyISAM和InnoDB。
MySQL默认使用的是MyISAM。但是,很多情况下这都是一个很糟糕的选择,除非你在创建一个非常简单抑或实验性的数据库。外键约束或者事务处理对于数据完整性是非常重要的,但MyISAM都不支持这些。另外,当有一条记录在插入或者更新时,整个数据表都被锁定了,当使用量增加的时候这会产生非常差的运行效率。
结论很简单:使用InnoDB。
2、使用PHP的mysql函数
PHP自产生之日就提供了MySQL库函数(or near as makes no difference)。很多应用仍然在使用类似mysql_connect、mysql_query、mysql_fetch_assoc等的函数,尽管PHP手册上说:
如果你在使用MySQL v4.1.3或者更新版本,强烈推荐使用您使用mysqli扩展。
mysqli(MySQL的加强版扩展)有以下几个优点:
可选的面向对象接口
prepared表达式,这有利于阻止SQL注入攻击,还能提高性能
支持更多的表达式和事务处理
另外,如果你想支持多种数据库系统,你还可以考虑PDO。
3、没有处理用户输入
这或者可以这样说#1:永远不要相信用户的输入。用服务器端的PHP验证每个字符串,不要寄希望与JavaScript。最简单的SQL注入攻击会利用如下的代码:
代码如下:
$username = $_POST["name"];
$password = $_POST["password"];
$sql = "SELECT userid FROM usertable WHERE username='$username' AND password='$password';";
// run query...
只要在username字段输入“admin';--”,这样就会被黑到,相应的SQL语句如下:
代码如下:
SELECT userid FROM usertable WHERE username='admin';
狡猾的黑客可以以admin登录,他们不需要知道密码,因为密码段被注释掉了。
4、没有使用UTF-8
美国、英国和澳大利亚的我们很少考虑除英语之外的其他语言。我们很得意地完成了自己的“杰作”却发现它们并不能在其他地方正常运行。
UTF-8解决了很多国际化问题。虽然在PHP v6.0之前它还不能很好地被支持,但这并不影响你把MySQL字符集设为UTF-8。
5、相对于SQL,偏爱PHP
如果你接触MySQL不久,那么你会偏向于使用你已经掌握的语言来解决问题,这样会导致写出一些冗余、低效率的代码。比如,你不会使用MySQL自带的AVG()函数,却会先对记录集中的值求和然后用PHP循环来计算平均值。
此外,请注意PHP循环中的SQL查询。通常来说,执行一个查询比在结果中迭代更有效率。
所以,在分析数据的时候请利用数据库系统的优势,懂一些SQL的知识将大有裨益。
6、没有优化数据库查询
99%的PHP性能问题都是由数据库引起的,仅仅一个糟糕的SQL查询就能让你的web应用彻底瘫痪。MySQL的EXPLAIN statement、Query Profiler,还有很多其他的工具将会帮助你找出这些万恶的SELECT。
7、不能正确使用数据类型
MySQL提供了诸如numeric、string和date等的数据类型。如果你想存储一个时间,那么使用DATE或者DATETIME类型。如果这个时候用INTEGER或者STRING类型的话,那么将会使得SQL查询非常复杂,前提是你能使用INTEGER或者STRING来定义那个类型。
很多人倾向于擅自自定义一些数据的格式,比如,使用string来存储序列化的PHP对象。这样的话数据库管理起来可能会变得简单些,但会使得MySQL成为一个糟糕的数据存储而且之后很可能会引起故障。
8、在查询中使用*
永远不要使用*来返回一个数据表所有列的数据。这是懒惰:你应该提取你需要的数据。就算你需要所有字段,你的数据表也不可避免的会产生变化。
9、不使用索引或者过度使用索引
一般性原则是这样的:select语句中的任何一个where子句表示的字段都应该使用索引。
举个例子,假设我们有一个user表,包括numeric ID(主键)和email address。登录的时候,MySQL必须以一个email为依据查找正确的ID。如果使用了索引的话(这里指email),那么MySQL就能够使用更快的搜索算法来定位email,甚至可以说是即时实现。否则,MySQL就只能顺序地检查每一条记录直到找到正确的email address。
有的人会在每个字段上都添加索引,遗憾的是,执行了INSERT或者UPDATE之后这些索引都需要重新生成,这样就会影响性能。所以,只在需要的时候添加索引。
10、忘记备份!
虽然比较罕见,但是数据库还是有崩溃的危险。硬盘有可能损坏,服务器有可能崩溃,web主机提供商有可能会破产!丢失MySQL数据将会是灾难性的,所以请确保你已经使用了自动备份或者已经复制到位。
11、Bonus mistake-不考虑使用其他数据库
对于PHP开发人员来说,MySQL可能是使用最广泛的数据库系统,但并不是唯一的选择。PostgreSQL和Firebird是最强有力的竞争者:这个两者都是开源的,而且都没有被公司收购。微软提供了SQL server Express,甲骨文提供了10g Express,这两者都是企业级数据库的免费版本。有时候,对于一个较小的web应用或者嵌入式应用,SQLite也不失为一个可行的替代方案。
水平有限,欢迎拍砖!!
原文链接:Top 10 MySQL Mistakes Made by PHP Developers
Ps:原文标题是写的10个,实际上作者列举了11个,所以我做了一个小小的改动
最新技术文章: