Tag: php

  • 唯一性索引的使用和道理

    (原文发布于2013年12月30日,原文链接Unique Index and its Rationale

    本文收录于[go4pro.org]

    ====

    这篇文章转移到比较后台的东西:MySQL,特别是数据库中唯一性索引(Unique Index)的使用和隐藏在之后的一些道理,收到了不少反响。

  • WMI:Windows管理接口

    (原文发布于2013年12月23日,原文链接PHP and WMI – Dig deep into Windows with PHP

    本文收录于[go4pro.org]

    ====

    这篇文章是我第一次抓编辑提供的主题(之前都是我自己的建议)。

    WMI提供了对Windows操作系统的一些接口,可以获得很多系统信息。

  • 一个老游戏的新生:猜动物

    (原文发布于2013年12月9日,原文链接Dart and PHP: A Legacy Animal Guess Game

    本文收录于[go4pro.org]

    ====

    11月份我没能在Sitepoint发表文章,原因是10月份的费用支付出了问题,所以我暂时停止了供稿直到我收到第一次的稿酬为止。

    这片文章是我第一次开始结合Dart和PHP进行开发。其出发点是我早年玩Apple II时的印象:一个猜动物的游戏。

  • 用Symfony 2开发WEB应用:第三部分

    (原文发布于2013年10月28日,原文链接Building a Web App with Symfony 2: Finalizing

    本文收录于[go4pro.org]

    ====

    这是Symfony 2系列的第三篇。介绍了很实用的一些东西:图像水印,分页,NativeQuery。

  • 用Symfony 2开发WEB应用:第二部分

    (原文发布于2013年10月21日,原文链接Building a Web App With Symfony 2: Development

    本文收录于[go4pro.org]

    =====

    这是Symfony系列的第二篇。进一步介绍了路由,控制器,实体和仓库,模板。

  • 用Symfony 2开发WEB应用:第一部分

    (这是我为Sitepoint写的第一篇文章,原文发布于2013年10月14日,原文链接Building a Web App with Symfony 2: Bootstrapping

    本文收录于[go4pro.org]

    =====

    这是一个系列文章,总共有三篇,在第一篇中我详细介绍了设置,Bundle,MVC的概念,路由,数据库等方面。限于篇幅,很多东西没能完全展开。不过作为一个开始,我觉得我已经做得不错了。

  • 在Sitepoint上发表的文章

    到目前,我已经在SitePoint的PHP专栏上发表了11篇文章,涵盖Symfony,Dart,MySQL,WMI等各个方面,也获得了肯定,当然也有报酬。

    在和我的编辑联系后,我可以将所有文章翻译为中文,然后发表在自己的Blog上——但是我不准备这么做,因为实在是很累的一件事。所以,我准备退而求其次,给出我文章的一个中文摘要,给出原文(英文)链接,发表在自己的Blog上。

  • 无聊的总结

    总结一下目前在用的一些开发工具。

    我不是开发人员,但是也喜欢偶尔开发一些小东西。

    开发所使用的语言局限在C/C++、C#和PHP、HTML上。

    C/C++我用的是NetBeans,PHP也是。NB对我使用的PHP框架Symfony 2的支持是非常好的。 唯一值得诟病的地方是我一直没有调好字体,所以中文字体下的英文显示很烂。

    C#我用两个IDE,一个是Visual Studio 2012 Express版本,一个是# Developer。值得推荐后者,免费、稳定、高效。

  • SF2中使用createNativeQuery和ResultSetMapping

    任氏有无轩”的后台中有一个统计是得出每天对书籍详情页面的访问数量,结果集很简单:一个日期,一个该天的访问次数。

    在原生SQL下,这个并不复杂,如下的语句就可以完成: select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd

    但是这个语句稍作变动(将book_visit改为FQN的引用)在SF2中用常规的createQuery将不能执行,提示date函数不被支持。

    解决这个问题有两种方法,一种是quick-and-dirty的纯原生SQL:

    $q = $em->getConnection()->prepare('select count(v.bid) vc, date(from_unixtime(v.visitwhen+8*60*60)) vd from book_visit v group by vd order by vd');
    $q->execute();
    return $q->fetchAll();

    这个方法简单明了,适合初学者使用。

    作为SF2和Doctrine的推荐方法,我们要使用所谓的ResultSetMapping和createNativeQuery。

    我们可以这样简单的理解,ResultSetpMapping提供了一种映射机制,将原生SQL返回的字段映射到结果集的域,从而使得Doctrine可以以此构造返回的结果集,然后执行SQL语句,并将结果返回。

    应该说,即使你不使用createNativeQuery,而只是用createQuery,Doctrine也还是会隐含的做一个ResultSetMapping的,只是不用显式调用罢了。

    代码如下:

    public function getVisitCountByDay()
    {
    $em = $this->getEntityManager();
    $rsm=new DoctrineORMQueryResultSetMapping;
    $rsm->addScalarResult('vc', 'vc');
    $rsm->addScalarResult('vd', 'vd');
    $q=$em->createNativeQuery('select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd', $rsm);
    $res=$q->getResult();
    return $res;
    }

    这个调用中,最关键的其实是两个addScalarResultvc是标量结果很自然,但是vd为什么是标量结果?Doctrine的文档对此语焉不详。

    我的理解是,一旦结果集中包含了一个标量结果(vc),那么所有其它结果也自然要变为标量结果。STOP。

    本文收录于[go4pro.org]

  • 重构“任氏有无轩”——第三天

    今天继续加深书籍详细信息页面的构造。

    在G+上95对我的进展发了一个评论:

    再加上点自动抓取网上共享章节的功能

    对这个要求,我只能说我只能实现一点点。我将在详细信息页面中构造一个显示豆瓣对应书籍的信息的部分。

    另外,我要实现一个功能是在这个页面中编辑书籍tags的功能。

    (more…)