YOYO的最新BLOG文章

Nov
23

今天的这篇文章用来讨论如何解决导入mysql大数据文件的问题,其实说的简单了就是一条SQL语句,而如果你是一名SQL高手,那完全可以略过此文。

对于经常使用MYSQL的人来说,phpmyadmin是一个必备的工具。这个工具非常强大,几乎可以完成所有的数据库操作,但是它也有一个弱点,对于往远程服务器上导入较大的数据文件的时候会速度奇慢,甚至出现长期没有响应的情况。

为什么会出现这样的情况呢?当我们选择一个sql数据文件并提交的时候,服务器首先要先把文件上传到服务器,然后才会执行导入代码把数据导入到数据库。我们知道phpmyadmin是通过web方式上传的数据文件,而web方式上传是很不稳定的,尤其是网速慢的时候,这就是为什么我们会有那么多次在电脑前面苦苦等待而最终却没有结果的原因。

通过上面的分析,我们知道这个问题是出在web上传而非导入程序,所以如果能避免通过web上传这个问题就好办了。我们可能会想到那功能强大的ftp上传工具,可是phpmyadmin无法选择远程路服务器上的文件,这是很郁闷的。

这里我们要放弃phpmysqladmin,通过mysql语句来导入数据库。很多人会纳闷怎么来执行SQL语句,这是一个关键的问题,这需要你的空间支持SSH(Secure Shell Protocol),并且你还得会一些linux命令
阅读全文 ->

Tags: , ,
Posted in PHP | MySQL
Oct
25

今天遇到一个挺有意思的现象,在使用phpmyadmin管理mysql数据库的时候,发现执行一条sql语句的时间竟然是-0.0000秒。我就奇怪了,0秒就0秒吧,怎么弄出个负0来啊?再怎么说sql语句的执行时间也不可能是负数啊,这phpmyadmin的程序是基于啥计算的呢?截图如下:

phpmyadmin计算的mysql执行时间

不知道这算不算phpmyadmin的一个bug,不过这个bug是挺难发现的,我是才换了新机器,而且是连着点了很多次才出现这么一次,最多也不会大于十分之一的概率。

我平时计算mysql的执行时间一般用microtime()函数来计算,不过用这个函数怎么计算也不会得到负数的啊,真不知道phpmyadmin是怎么计算的,有时间真该研究研究。

Tags: ,
Posted in PHP | MySQL
Oct
21

最近很多朋友说他的MySQL数据库里面的数据是乱码,读取出来在页面显示也不正常,这可能是很多学习PHP操作数据库的时候遇到的一个问题,当然英文除外。

对于这个问题,有两种情况需要说明一下:

第一、写入数据库和读取数据库的页面编码要一致。例如写入的时候页面的编码是UTF8,那读取的时候你也要用UTF8编码的页面显示,这样就不会出现乱码了。这种情况下最好把数据库里面的编码设置为utf8-general-ci,因为这种情况数据在数据库中是乱码的,但是显示出来是正常的,所以设置为别的编码的时候容易出现写入失败。

第二、连接数据库的时候添加mysql_query(”SET NAMES 编码”);。例如写入的时候想用UTF8,则在连接数据库之后添加mysql_query(”SET NAMES UTF8″);,这样所有的数据写入和读取都是以UTF8编码进行的,所以这种情况下数据库中的数据也是正常的,而且这种情况不容易出现错误。

对于这两种情况,我觉得首先得记住第一种,就是写入和读取的时候一定要保证页面的编码相同,这也是第二条的一个基础,然后再记住mysql_query(”set names 编码”);这条语句,这样在你的非英文页面中就不会出现乱码了。

Tags: ,
Posted in PHP | MySQL, 刀光剑影
Sep
26

经过几天的努力,终于把Bo-blog2.0.3转移到wordpress2.3了,今天晚上把原来的 bo-blog程序也用最新版本的wordpress从服务器上替换了下来。

这次转移程序让我感触最深的就是细枝末节的东西太多,调整这些很细微的东西的时候最头痛了,写程序吧,有点不值得,不写吧,工作量也不算小。整个的 转移过程有很多的东西都是在不断的衡量中进行的。而且以前由于删除Bo-blog上面出现的大量垃圾链接而使很多的数据统计都是错误的,因为当时是在数据 库里面直接写sql改的(否则准累不清,都是上万条的)。

其实数据的转换程序我是先前早就写完了的,今天的时间主要花费在了调整原来的链接和现在的链接统一上面,本来这件事情是可以在.htaccess搞定的,但是后来考虑还是在404页面直接用PHP写好一点,于是写了以下程序:
阅读全文 ->

Sep
22

这几天我一直在做从bo-blog转移到wordpress的尝试,昨天晚上遇到了转化后的乱码问题。遇到乱码并不郁闷,郁闷的是我不知道为什么,后来我是通过添加mysql_query(”SET NAMES UTF8″);解决了这个问题,我知道这句SQL的作用,但是我还是不知道为什么我原来的转换会出现乱码,因为之前我同样的操作都没有出现过乱码问题。

在百思不得其解的时候,我尝试在写入一条SQL语句后直接用我的页面把刚才写入的数据显示出来,让我兴奋的是这次不是乱码,而在wordpress的页面显示的还是乱码,于是我立即去wordpress文件里面找SET NAMES的SQL语句,最终我在wp-includes/wp-db.php里面找到了它,至此我彻底明白了。

对于解决MYSQL乱码的问题,总结如下几点:

第一、为你的链接数据库的页面增加SET NAMES语句,如:SET NAMES UTF8,它的作用是设置本次数据库联接过程中,数据传输的默认字符集是UTF8,同时在写入和展示数据的页面保证显示的是UTF8,这样你的页面就不会出现乱码问题了。
第二、你可以不用SET NAMES语句,但是请一定保证写入数据的页面和展示数据的页面要用同样的编码,并且数据库编码最好用UTF8,因为用其他编码容易在写入的时候出现错误。保证写入数据的页面和展示数据的页面用相同的编码也不会出现乱码问题,但是这个时候写入的数据的编码并不等于你页面的编码
阅读全文 ->

Sep
13

这几天一直在试用Zend Frameworklucene功能,这是Zend Framework最近推出的Java版lucene的PHP改写版。从总体感觉来说,PHP版本的lucene比JAVA版的lucene差的还有很远。

我们可以从Zend Framework的网站上免费获得lucene的php版本,地址是:http://framework.zend.com/download/。在Zend Framework的压缩包里面有很多程序,其中的Search文件夹里面就是lucene的PHP版本,我们也可以把他单独分离出来。在压缩包里面有两个Lucene的演示文件create-index.php和search-index.php,代码如下:
create-index.php:

require_once 'Zend/Feed.php';
require_once 'Zend/Search/Lucene.php';
 
//create the index
$index = new Zend_Search_Lucene('/tmp/feeds_index', true);
 
// index each item
$rss = Zend_Feed::import('http://feeds.feedburner.com/ZendDeveloperZone');
 
foreach ($rss->items as $item) {
$doc = new Zend_Search_Lucene_Document();
 
if ($item->link && $item->title && $item->description) {
 
$link = htmlentities(strip_tags( $item->link() ));
$doc->addField(Zend_Search_Lucene_Field::UnIndexed('link', $link));
 
$title = htmlentities(strip_tags( $item->title() ));
$doc->addField(Zend_Search_Lucene_Field::Text('title', $title));
 
$contents = htmlentities(strip_tags( $item->description() ));
$doc->addField(Zend_Search_Lucene_Field::Text('contents', $contents));
 
echo "Adding {$item->title()}...\n";
$index->addDocument($doc);
}
}
 
$index->commit();

阅读全文 ->

Aug
31

在PHP里面统计时间的时候绝大多数是用UNIX时间戳计时的,我在测试这种计时的时候发现有一个上限,这个上限是:2147483647,也就是2038年1月19日11时14分07秒。

我在网上查了一下这个数字发现int类型值最大是2147483647,而且也有很多人遇到数值极限这个问题,还有很多人说银行存款无法超过这个数,这个数就是21亿多了,看来这个人真有钱,再仔细一瞅,发现是论坛里的银行,呵呵。

看到网上很多人说这个数是一个梅森素数,具体梅森素数是什么呢?经过查找是这样的:形如2^p-1的正整数,其中p是素数,常记为Mp 。若Mp是素数,则称为梅森素数。而网上说已发现的最大梅森素数是p=24036583,看来2147483647是不是梅森素数也是一个疑问。

对于做PHP的人来说,如果2147483647真是一个极限,那想想也确实是个问题,到2038年1月19日之后用什么计时呢?也许这不是我们应该操心的问题,可能到时候就有解决的办法了,千年虫都没难倒我们,这个php的计时怎么能难倒我们呢?!
阅读全文 ->

Tags: , ,
Posted in PHP | MySQL
Aug
23

很多人都以为htmlentities跟htmlspecialchars的功能是一样的,都是格式化html代码的,我以前也曾这么认为,但是今天我发现并不是这样的。

这两个函数在格式化带有英文字符的html代码的时候基本没啥问题,但是htmlentities对中文字符也不放过,这样得出来的结果是中文字符部分变为一堆乱码。当时做英文站的时候根本就没觉察到这个问题,而今天公司的一个收藏站却因为有有非英文字符而出现了问题,我最终查出来是htmlentities这个函数的问题,同时我也找到了htmlspecialchars这个函数。

对于这两个函数,php手册上都是英文做的解释,其中在htmlentities函数的说明部分有这么一段英文:

This function is identical to htmlspecialchars() in all ways, except with htmlentities(), all characters which have HTML character entity equivalents are translated into these entities.

从这句话中我们也可以看出来这两个函数虽然基本功能差不多,但是还是有细微的差别在里面的。再仔细看htmlspecialchars函数里面的一段话:

The translations performed are:

‘&’ (ampersand) becomes ‘&’

‘”‘ (double quote) becomes ‘”‘ when ENT_NOQUOTES is not set.

”’ (single quote) becomes ”’ only when ENT_QUOTES is set.

‘<’ (less than) becomes ‘<’

‘>’ (greater than) becomes ‘>’

阅读全文 ->