月度归档:2012年02月

PHP中PDO数据访问对象处理LIMIT子句的一处BUG

近期的项目中,数据访问层类使用了PDO作为底层,PDO相比mysql_*系列函数具有更高的性能和安全性。在使用时却发现了PDO对象处理带有LIMIT子句的SQL语句时,不能正确处理LIMIT子句中的占位符。例如:

$sql = "SELECT * FROM user LIMIT ?, ?";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(0, 20));
.... 

在这段代码中,按照PDO文档的说法,两个问号的位置将会被0, 20这两个参数填充,并且类型将会使用和参数类型相匹配的PDO数据类型。但是执行这条语句却返回一个空集合。

var_dump($stmt->fetchAll());
// 输出 empty 

然而将问号的位置直接填写数字,是可以正常取得20条记录的。

在谷歌上搜索发现,有其他人也遇到了同样的BUG:
继续阅读

近期关注的Web开发技术

1. Node.js:

http://nodejs.org/

Node.js其实就是Javascript的服务器端版本的一个实现。它采用了Google V8引擎作为其Javascript运行的核心引擎,动力强劲,效率很高。充分利用率Javascript的事件机制,将一切耗时的IO操作采用异步方式处理。其网络访问的核心采用了和高性能Web服务器Nginx一样的事件驱动IO模型,底层采用Linux下的epoll等高性能网络通讯接口实现,在内存和CPU开销拥有很大的优势,尤其是对于需要大量实时性要求很高,或必须采用HTTP长连接形式的请求处理非常有效率。之前在VMWare下虚拟机中Ubuntu Linux环境下使用webbench进行的压力测试显示,500客户端并发,30秒内可处理近4万次访问请求,并且页面无明显延迟。同样环境下的Nginx+PHP FastCGI仅能做到4000多次访问请求的处理,其性能优势可见一斑。另外客户端和服务器端均可采用Javascript,也有利于前后端开发的整合与统一。

继续阅读