2011 年 02 月

浏览模式: 标准 | 列表 | 图文
alipay和tenpay等的接口操作记录学习

alipay和tenpay等的接口操作记录学习

昨天加班折腾了一下商铺的支付流程,也算是测试了这些接口,不过还是以alipay和tenpay接口居多(即支付宝和财务通接口)

说实话,财务通的接口有点乱,但有一点好处,每个接口的名称都不一样,不同的接口可以很容易认出来,而支付宝就不一样,名称是一样的,但代码和结构不太一样。累了一点。

不过,细分起来这些接口无非就是那几样东西

1、参数,这些都是固定的,有顺序,所以,其实是很方便的,参考一下文档即可。然后做一下MD5进行sign,这些是用来做数据校验的。(有一些接口是对GET参数按照key进行sort而处理的,这种最方便,直接ksort就OK了,如果不是就更方便按顺序录入参数就可以了。)

2、几个固定的URL,接口的URL,notify_url,return_url,了解了这些东西之后就好处理了。

无非就是这些东西,因为都是转向到支付页面进行处理的,所以也不用过多的担心,根据接口来就行了,当然为了要在支付宝或者财务通里看到订单的详细内容,需要那些Desc里写详细,当然你自己平台上的订单号也要传递过去,否则日后无法对帐。

由于我测试 的都是即时到账接口,所以没有什么特别多的经验可以谈,只是我自己了解后做的小记录而已。

Javascript中各种trim的实现

Javascript中各种trim的实现

说到trim,其实这真的让无数前端郁闷。比如在处理input框里内容的时候,都会需要处理input内容的左右空格。但让人郁闷的是,String里居然没有原生方法,而每个人的实现方法都会不一样,效率也各有不同。

但是,新版的ECMA-262里已经表示有此方法了:

15.5.4.20 String.prototype.trim ( )

The following steps are taken:

1. Call CheckObjectCoercible passing the this value as its argument.
2. Let S be the result of calling ToString, giving it the this value as its argument.
3. Let T be a String value that is a copy of S with both leading and trailing white space removed. The definition
of white space is the union of WhiteSpace and LineTerminator .
4. Return T.

NOTE The trim function is intentionally generic; it does not require that its this value be a String object. Therefore, it
can be transferred to other kinds of objects for use as a method.

本文摘自http://www.cnblogs.com/snandy/archive/2011/02/26/1965866.html,只是经过我自己的整理了啦。

第一种:这种是大多数人都会写的,也是流传最多的代码了吧?

String.prototype.trim = function() {
//return this.replace(/[(^\s+)(\s+$)]/g,"");//會把字符串中間的空白符也去掉
//return this.replace(/^\s+|\s+$/g,""); //
return this.replace(/^\s+/g,"").replace(/\s+$/g,"");
}

第二种:来自motools:

function trim(str){
return str.replace(/^(\s|\xA0)+|(\s|\xA0)+$/g, '');
}

第三种:这是jQuery的,jquery的方法类似于第一种:

function trim(str){
return str.replace(/^(\s|\u00A0)+/,'').replace(/(\s|\u00A0)+$/,'');
}

第四种是来自所摘博客中最写的:Steven Levithan 在进行性能测试后提出了在JS中执行速度最快的裁剪字符串方式,在处理长字符串时性能较好:

function trim(str){
str = str.replace(/^(\s|\u00A0)+/,'');
for(var i=str.length-1; i>=0; i--){
if(/\S/.test(str.charAt(i))){
str = str.substring(0, i+1);
break;
}
}
return str;
}

博客中还写了这么一点,那就是Molliza Gecko 1.9.1引擎中还给String添加了trimLeft ,trimRight 方法。

这让我想起了PHP的代码,比如ltrim,rtrim,trim之类的

杂记

杂记

一点小记录吧
第一:jQuery 升级到1.5.1了,前两天在群里的时候还有人在说,1.5不支持IE9,因为在使用的时候居然出错了。报错信息居然是document.getElementsByTagName,但是直接写这样的document.getE....是正常的。所以,这明显就是1.5的BUG。

当然这里不是说这个,这里是一篇翻译,http://www.cnblogs.com/sanshi/archive/2011/02/25/1964441.html。我觉得主要内容是这一段:

“jQuery 目前把 IE9作为一个重要的浏览器来支持。所有已知的BUG都已经得到修复或者已经提交给IE的开发团队以便在最终版本中得到解决。(All known bugs have been fixed and/or been reported to the IE team for resolution in the final release.)

三个新的参数被添加到jQuery.ajax():

isLocal: 允许当前的执行环境被识别为“local”(例如文件系统),jQuery默认情况下是不会识别这种环境。如下的协议被识别为本地环境:file, *-entension, widget. 如果需要修改isLocal,推荐使用$.ajaxSetup()方法来修改。

mimeType: 可以用来覆盖XHR的mime type.

xhrFields: 一个可以添加到原生XHR对象上的键值对(fieldName-fieldValue)。比如,你可以在跨域调用中设置withCredentials为true。”

第二:第二件嘛就是果粉比较开心的事了,那就是前两天刚刚苹果刚刚更新了商店里商品的信息,所有的mac pro现在都更新CPU为i5了,而且价格没变。这实在太让人激动开心了。黑黑,看来我去年没有买成mac pro也是属于塞翁失马焉知非福吧。

第三:yahoo的邮箱更新了。其实这并不算是什么 新闻吧。不过自从我用yahoo的邮箱以来,这是第三次更新了。虽然每一次打开邮箱都感觉比较慢(应该是邮箱服务器在国外的关系吧),但是我想说的是用户体验。用过很多WEB邮箱,几乎到现在都没有更新过,几年前什么 界面现在还是。。。当然QQ邮箱变化是较大的,以前最喜欢用网易的邮箱,SINA以前是最烂的,现在好很多。139邮箱原来也不行,现在也好很多了。gmail的变化也比较小,只是一些小功能的更新,只是这些小功能的更新会让用户使用起来更流畅。

第四:Google JavaScript Style Guide。这个嘛,啥时候有空的时候翻译翻译吧。还是算比较好的,虽然只是google的js style,但是对我们开发人员来说也可以学习学习。原文在这里http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml?showone=Tips_and_Tricks

转:Ubuntu 9.04上的XEN虚拟服务器[转]

转:Ubuntu 9.04上的XEN虚拟服务器[转]

因为我不知道我能将服务器用来干嘛,所以我一直在想着是否有机会将自己的服务器进行虚拟化,由于找了一些资料都是centos之类的,所以确实不知道如何在ubuntu下进行安装此玩意。
虽然有此意愿,但确实我无法安装,因为我的机器的内存太小了,只有2G,如果进行虚拟化的话,内存应该是不够用的。
不过,即使这样,安装性的文章,我还是要备份一下,因为,我在找朋友赞助我内存条了。黑黑。。。。

原文地址:http://wells.osall.com/blog /index.php?uid=1&m=content&p=1434#article_content.php%3Fid%3D1434%26uid%3D1%26dt%3DY:pane:N;

要安装并使用XEN,首先更新软件源的信息。

# sudo apt-get update

然后安装xen服务器软件和工具。

# sudo aptitude install ubuntu-xen-server
# sudo aptitude install ubuntu-xen-desktop

这时候我们去/boot目录看,可以看到一个xen3.3.gz文件,但是没有供操作系统使用的XEN化的内核,因此此时的操作系统还不是Doamin-0。我找了好久都没找到现成的XEN化内核,于是就只能根据XEN手册自己编译一个内核了。

下载安装最新的kernel文件。

# sudo apt-get install linux-image-server linux-server

安装编译所需要的一些工具包。

# sudo apt-get install build-essential libncurses5-dev gawk mercurial

接下来下载XEN所提供的XEN化的内核的源代码。

# mkdir -p ~/build/linux-2.6.27-xen
# cd /usr/src/
# sudo hg clone http://xenbits.xensource.com/ext/linux-2.6.27-xen.hg

配置内核选项。

# cd /usr/src/linux-2.6.27-xen.hg
# sudo make O=~/build/linux-2.6.27-xen/ menuconfig

出现内核参数的配置菜单后,根据如下的选项修改配置。

General setup ---> Choose SLAB allocator (SLUB (Unqueued Allocator)) ---> (X) SLAB

Processor type and features ---> Subarchitecture Type (PC-compatible) ---> (X) Enable Xen compatible kernel

Bus options (PCI etc.) ---> [*] PCI support
[*] Xen PCI Frontend
[ ] Xen PCI Frontend Debugging (NEW)

将 <M> 802.1d Ethernet Bridging 修改为 <*> 802.1d Ethernet Bridging:

Networking support ---> Networking options ---> <*> 802.1d Ethernet Bridging

关闭 10000 Mbit Ethernet 支持(否则可能编译失败):

Device Drivers ---> [*] Network device support ---> [ ] Ethernet (10000 Mbit) --->

在 XEN 选项区中,按照下面选择选项(确认选择 Xen version compatibility (3.0.4 and later) 来取代原来的 Xen version compatibility (3.0.2 and later)):

Device Drivers ---> XEN ---> [*] Privileged Guest (domain 0)
<*> Backend driver support (NEW)
<*> Block-device backend driver (NEW)
<*> Block-device tap backend driver (NEW)
<*> Network-device backend driver (NEW)
(8) Maximum simultaneous transmit requests (as a power of 2) (NEW)
[ ] Pipelined transmitter (DANGEROUS) (NEW)
< > Network-device loopback driver (NEW)
<*> PCI-device backend driver (NEW)
PCI Backend Mode (Virtual PCI) --->
[ ] PCI Backend Debugging (NEW)
< > TPM-device backend driver (NEW)
<M> SCSI backend driver (NEW)
<M> Block-device frontend driver
<M> Network-device frontend driver
<M> Network-device frontend driver acceleration for Solarflare NICs (NEW)
<M> SCSI frontend driver (NEW)
<*> User-space granted page access driver (NEW)
<*> Framebuffer-device frontend driver (NEW)
<*> Keyboard-device frontend driver (NEW)
[*] Disable serial port drivers (NEW)
<*> Export Xen attributes in sysfs (NEW)
(256) Number of guest devices (NEW)
Xen version compatibility (3.0.4 and later) --->

保存完配置后就可以开始编译内核了。

# sudo make O=~/build/linux-2.6.27-xen/
# sudo make O=~/build/linux-2.6.27-xen/ modules_install install

通过漫长的等待(我的Atom 330 CPU花了大约3个小时),终于编译完内核了。编译安装完成后,去/boot目录检查,应该可以看到生成了支持xen的2.6.27.5的内核了。

# ls -l /boot
total 72697
-rw-r--r-- 1 root root 525592 2009-04-17 12:05 abi-2.6.28-11-server
-rw-r--r-- 1 root root 524602 2009-07-25 11:14 abi-2.6.28-14-server
-rw-r--r-- 1 root root 87448 2009-08-13 19:50 config-2.6.27.5
-rw-r--r-- 1 root root 90587 2009-04-17 12:05 config-2.6.28-11-server
-rw-r--r-- 1 root root 90560 2009-07-25 11:14 config-2.6.28-14-server
drwxr-xr-x 2 root root 1024 2009-08-13 20:04 grub
-rw-r--r-- 1 root root 8259056 2009-08-14 03:31 initrd.img-2.6.28-11-server
-rw-r--r-- 1 root root 8272673 2009-08-13 15:02 initrd.img-2.6.28-14-server
drwxr-xr-x 2 root root 12288 2009-08-14 03:17 lost+found
-rw-r--r-- 1 root root 128796 2009-03-28 04:12 memtest86+.bin
-rw-r--r-- 1 root root 1651431 2009-08-13 19:50 System.map-2.6.27.5
-rw-r--r-- 1 root root 1871187 2009-04-17 12:05 System.map-2.6.28-11-server
-rw-r--r-- 1 root root 1863183 2009-07-25 11:14 System.map-2.6.28-14-server
-rw-r--r-- 1 root root 1169 2009-04-17 12:09 vmcoreinfo-2.6.28-11-server
-rw-r--r-- 1 root root 1169 2009-07-25 11:16 vmcoreinfo-2.6.28-14-server
-rw-r--r-- 1 root root 3145318 2009-08-13 19:50 vmlinuz-2.6.27.5
-rw-r--r-- 1 root root 3520832 2009-04-17 12:05 vmlinuz-2.6.28-11-server
-rw-r--r-- 1 root root 3510496 2009-07-25 11:14 vmlinuz-2.6.28-14-server
-rw-r--r-- 1 root root 470084 2009-06-18 16:16 xen-3.3.gz

内核有了,但是还没有initrd.img也就是启动时所需的ramdisk文件,手动来生成一个。

# sudo depmod 2.6.27.5
# sudo update-initramfs -c -k 2.6.27.5

更新grub引导程序。

# update-grub

现在XEN的环境基本上都建好了,我们需要来修改一下配置文件了。

XEN服务的配置文件都在/etc/xen目录下。XEN服务的主配置文件是 /etc/xen/xend-config.sxp。打开这个文件,我们要确认的是XEN虚拟服务器的网络连接方式,这是相当重要的。我选择了桥接模式, 也就是说,Domain-U虚拟机和Domain-0在同一子网,用Domain-0的物理网卡来进行桥接到虚拟机的虚拟网卡。

# sudo vi /etc/xen/xend-config.sxp

确认网络部分是这样配置的:
(network-script network-bridge)

下一步要根据你的习惯来修改。你喜欢将虚拟机安装在哪里?是用一个镜像文件来虚拟成磁盘,还是将一个LVM逻辑卷虚拟成磁盘,或者干脆就是将物理磁盘给虚拟机使用?

对于后两种选择,你可以跳过这一步。但如果你选择了在现有的文件系统中建立一个镜像文件来虚拟成一个虚拟机的物理磁盘,那就要按照下面修改默认配置了。

由于镜像文件在加载的时候是作为回圈设备(loop device),因此要将操作系统的默认最大回圈设备数量调大,以免出现不必要的问题。

# sudo vi /etc/modules

将loop这一行修改为:
loop max_loop=64

好啦,重启主机,进入Domain-0的世界!!!

# sudo shutdown -r now

重启完成后检查一下kernel版本,是不是XEN化的那个2.6.27.5?

# uname -r
2.6.27.5

现在可以使用XEN的管理命令xm,来看看虚拟机运行状况啦!

# sudo xm list
Name ID Mem VCPUs State Time(s)
Domain-0 0 1473 4 r----- 479.8

哈哈,可以看到Domain-0正常运行!!!你可以使用xm help来学习如何通过xm来管理虚拟机。

在State列,看到Domain-0是r的状态,也就是说,这个Domain正在运行中,并有任务在该Domain上运行。虚拟机还有如下几种状态:

  • r :该domain正在消耗CPU资源,任务运行中;
  • b :该domain正被暂时搁置(blockded),一般来说是因为这个domain在闲置中,等待输入或输出(I/O);
  • p :该domain处于暂停状态,通常是因为管理员使用 xm pause 暂停了这个domain。当domain至于暂停状态时,Xen的管理器将不会处理这个domain的任何动作;
  • s :该domain正在关机;
  • c :该domain已经crash了,但是没有关机。一般来说是因为domain的配置文件没有设置 on_crash 动作所致;
  • d :该domain正在死机中,一般来说是因为这个domain无法正确 shutdown/crashed 之故。

---------------------------
顺便说一下,文章所提到的原文地址无法打开,我的这篇文章来自于http://hi.baidu.com/airzhutao/blog/item/0cb546ef4ebb3be4cf1b3e4a.html。

卓越亚马逊太烂了

又是一件亲身经历的事情了。
在卓越亚马逊网上买IPOD,明明写着有货,但却没有按时发货。这让人感觉有点烦人
事情还是需要从头说起。
某天,在卓越上订了一个IPOD,上面写着预计2~3日内到达,所有的商品都是写着目前有现货,所以我就欣欣然下单了。
下完单后,订单中显示,预计到货日期为2-23,我想那,确实挺快呀。
于是我等到了2月23日,发现没有任何快递联系我,于是打开卓越网,看了一下订单,发现上面写着尚未发货,于是我打了400电话进行咨询。
400说,由于配货不全,需要从苏州调货,然后说预计25日 可以到达,然后我就发现,预计到达时间改成了25日。
今天,25日了,打开订单一看,却仍然这样显示:
4ef138d0bfaf467737671a29d5b0fe91
郁闷了,气愤了。
重新打400电话,400说我的订单显示是有缺货,我说那你帮我查一下吧,结果查询下来,没有任何缺货状态,所有的商品都有现货,那为什么却没有发货呢?
400解释说可能原先没货,现在有货了。我告诉他我下单的那天明明显示都是有货的状态,400解释可能是上海地区没货,从其他地方调货的。
我回复说,为什么5天了,还没有调好货呢?400说了一句我比较愤怒的话:可能是路上堵车了吧。
然后400让我重新下单,说这样可以快一点(这是什么理由?)
靠,什么车要堵上四、五天啊。
我们国家的道路状况已经差到这个地步了?

因为郁闷,所以写下来做个记录。

转:因闰秒造成的误差

转:因闰秒造成的误差

转帖前的话:这个问题我没有遇到过,事实上,如果不是看到这篇博客,我根本不知道原来还有闰秒这个问题。先看看这篇文章吧。

项目中碰到 PHP 和数据库之间,计算存在时间计算误差。大致的情况为根据段时间字符串,例如:

2012-12-14 00:00:00 UTC

使用 MySQL 的 UNIX_TIMESTAMP 函数以及 PHP 的 strtotime 计算得出的时间戳,大概有半分钟(差不多有28秒)的误差。

同时,比较‘诡异’的是直接使用当前时间(MySQL 中 UNIX_TIMESTAMP 不带参数,同时 PHP 直接使用 time 函数),却不存在误差(测试脚本)。

排除了 PHP 和 MySQL 之间因为时区设置造成的时间误差 -- 根据经验,如果是时区设置造成的时间误差,应该有几个小时不会那么少。

搜索解决问题期间扫了下这篇帖子,觉得应该是‘闰秒’这玩意造成的问题。搜索 PHP 闰秒相关的配置似乎没有相关的,不过在这里似乎找到了些答案。

You also can experience this behavior if your system timezone is with leap seconds. To avoid the problem in this case please run query UPDATE mysql.time_zone SET Use_leap_seconds='N' and restart the server. Please inform us if this helps.

按照上述的步骤执行,解决了问题。

回过头来,我在工作机(Windows)上测试,发现并不起作用。研究了下,原来闰秒也需要操作系统的支持:

1、对于大多数新的 Linux 内核,在设计时它们都是支持闰秒的,这一点在 REHL4/5 的 2.6.x 内核中得到肯定。
2、如果 Linux 系统没有配种某种时间同步机制(比如NTP),那么和闰秒无关,唯一导致的结果只是系统时间会比 UTC时间快一秒。
3、Window Time Service 不支持闰秒,包括服务器和客户端。
回过头来考虑项目中碰到的这种情况,直接使用时间戳存储时间点会更精确些。最后,提供下相关的测试脚本,看看你的环境是否也会有类似的问题。
Junction 详细使用方法

Junction 详细使用方法

看到有人回复说想了解junction的使用方法,我在这里就详细介绍一下吧。

下载地址在那篇文章已经有,这里我就不介绍了。

我说一下具体的应用方法吧,虽然可能还是比较简单的。

1、先执行一下junction.exe文件,让它注册到系统(我是将它扔在快盘里面的,这样我就不需要到处下载了)

2、创建引用:junction x:\test c:\test ,第一个参数是在x盘里创建的目录,需要该目录不存在 。第二个参数是目标目录。(也就是将C盘的test目录创建了一个快捷方式到x盘的test目录下),只是这种快捷方式与平时的快捷方式不太一样而已

3、其实,这样就完事了。如果觉得目录创建错误了,可以junction -d x:\test 将它删除

如果知道一个目录是引用来的,如何查看目标目录是啥呢?可以这样:

假设知道x:\neatpic是引用来的目录,可以这样运行一下
X:\>junction.exe x:\neatpic

Junction v1.06 - Windows junction creator and reparse point viewer
Copyright (C) 2000-2010 Mark Russinovich
Sysinternals - www.sysinternals.com

x:\neatpic: JUNCTION
Substitute Name: e:\www\htdocs\neatpic
OK,这样就知道,目标目录是 e:\www\htdocs\neatpic

如果想知道所有的junction引用的目录,可以运行想要查看的目录下运行,junction -s,

----------------------

由于这种创建快捷方式的功能与平时windows的不一样,对于虚拟盘来说,它认为这就是一个实际存在的文件,所以它就认为这些文件是在这个盘里是物理存在的,所以,就会执行正常的上传下载之类的操作。

【其实junction相当于linux下的管道,这样一来就应该明白了吧?】

推荐密码管理软件: KeePass

推荐密码管理软件: KeePass

KeePass Password Safe 2,这款软件是同事在用的,看他使用的时候,我觉得还不错,所以就向他找了一份,并尝试着使用了一下,觉得还是感觉不错的,所以用来推荐一下

Keepass有着自己的数据格式,至于能不能被其他软件所破解,就不是我关心的了(不可能说永远不可能破解,只是机率会比较小一点吧)

Keepass打开数据库时,可以指定密码,有三种方式1、密码,2、密码文件3、windows自身的用户

由于我用金山快盘,所以我就每天在单位和家里进行同步喽。使用起来也算方便,也能够自己按照自己的规定生成密码,有一个好处就是可以设定双击复制密码的时候在剪贴板里存放多少时间 ,超过这个时间后就自动被清空,这相对会让人感觉比较安全。

再说一下,这个软件也有很多的插件,比较感觉不错的会有两个插件是我想用的,kefromff,和sync,一个是可以把firefox里存放的密码导入到keepass里,另一个就是帮你把数据库备份啦 。。

其实还有一些插件,比如自动输入密码这个功能,我是觉得不太方便,因为他有顺序要设定,不能根据当初的设定而自动输入(如果顺序不对,就输的不对,我觉得太麻烦了)

当然,作为一个优秀的软件,它还是有汉化包的,所以,对于普通用户来说没有什么难度啦:http://keepass.info/ , 插件地址在:http://keepass.info/plugins.html , 插件地址是:http://keepass.info/translations.html。

以前好象有一个叫roboForm之类的软件,也用过一阵子,不过相对来说,用了这个软件后,我好象就忘了roboForm,不过那个软件好象是支持自动填表的。。而且相对比较准确(firefox也是可以的)

Yii:relations update(self::STAT)

Yii:relations update(self::STAT)

今天在群里有朋友问我yii的relations的问题,结果贴出来的代码居然是类似这样的:

function relations(){
return array(
'xx'=>array(self::STAT,'aa','aa_id')
);
}

我当时直接了当的对他说,错了,怎么可能会有self::STAT呢?只有has_many,has_one,belongs_to,many_many,stat是错的。结果他回答说我OUT了,STAT是新加入的。。。

于是欣欣然跑到YII的官网查看了一下GUIDE,果然在 Relational Active Record,一节中发现了这个Statistical Query。

官方怎么说来着?第一句就让我大吃一惊:

Note: Statistical query has been supported since version 1.0.4.

奇怪,以前怎么没注意?

Besides the relational query described above, Yii also supports the so-called statistical query (or aggregational query). It refers to retrieving the aggregational information about the related objects, such as the number of comments for each post, the average rating for each product, etc. Statistical query can only be performed for objects related in HAS_MANY (e.g. a post has many comments) or MANY_MANY (e.g. a post belongs to many categories and a category has many posts).

Performing statistical query is very similar to performing relation query as we described before. We first need to declare the statistical query in the relations() method of CActiveRecord like we do with relational query.

class Post extends CActiveRecord
{
public function relations()
{
return array(
'commentCount'=>array(self::STAT, 'Comment', 'post_id'),
'categoryCount'=>array(self::STAT, 'Category', 'post_category(post_id, category_id)'),
);
}
}

In the above, we declare two statistical queries: commentCount calculates the number of comments belonging to a post, and categoryCount calculates the number of categories that a post belongs to. Note that the relationship between Post and Comment is HAS_MANY, while the relationship between Post and Category is MANY_MANY (with the joining table post_category). As we can see, the declaration is very similar to those relations we described in earlier subsections. The only difference is that the relation type is STAT here.

With the above declaration, we can retrieve the number of comments for a post using the expression $post->commentCount. When we access this property for the first time, a SQL statement will be executed implicitly to retrieve the corresponding result. As we already know, this is the so-called lazy loading approach. We can also use the eager loading approach if we need to determine the comment count for multiple posts:

$posts=Post::model()->with('commentCount', 'categoryCount')->findAll();

The above statement will execute three SQLs to bring back all posts together with their comment counts and category counts. Using the lazy loading approach, we would end up with 2*N+1 SQL queries if there are N posts.

By default, a statistical query will calculate the COUNT expression (and thus the comment count and category count in the above example). We can customize it by specifying additional options when we declare it in relations(). The available options are summarized as below.

  • select: the statistical expression. Defaults to COUNT(*), meaning the count of child objects.

  • defaultValue: the value to be assigned to those records that do not receive a statistical query result. For example, if a post does not have any comments, its commentCount would receive this value. The default value for this option is 0.

  • condition: the WHERE clause. It defaults to empty.

  • params: the parameters to be bound to the generated SQL statement. This should be given as an array of name-value pairs.

  • order: the ORDER BY clause. It defaults to empty.

  • group: the GROUP BY clause. It defaults to empty.

  • having: the HAVING clause. It defaults to empty.

关键的是看最后这几个条件,可以让你知道这些参数如何配置。。。
官方的GUIDE地址:http://www.yiiframework.com/doc/guide/1.1/en/database.arr

意外:财经朗闲评又复出了?

意外:财经朗闲评又复出了?

这,纯粹是一篇废话连篇的博客
主要是因为晚上在看第一财经的时候,看到郎咸平在那里聊天,然后是说节目的名称是财经郎闲评。
依稀记得几年前这个节目就是在财经频道的,然后突然就消失了,然后就是爆出了上海的社保基金挪用案。
郎咸平这几年写了不少书,说了不少话,也分析过一些企业,使得一些企业被咔嚓了。
有人恨,有人爱。我是无所谓,不管他说的是对是错,其中只是有一些话说的比较浅显,再加上这些年国内的一些砖家叫兽们说的话也太不靠谱了,所以,朗就越来越被很多人所接受。

好吧,上面都是一些乱说的,唯一让我意外的是,经历了这么多年,郎咸平又杀回来了,节目的名字都没变,还是叫《财经郎闲评》。。
让我想起了很多人,很多事,比如当年那个曹启泰(boss堂主持人)
于是,我又想,这一回,他能呆多久?【今天在讲楼市,下一回呢?期待一下】