Category: Php / Pear / Mysql / Node.js

PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method

最终实例在下方 以前用过cakephp, 他们的数据库查询还是蛮强大的, 后来好奇它的类的写法,比如: <?php $this->Post->findByTitle('My First Blog Post'); $this->Author->findByLastName('Rogers'); findBy<fieldName> string $value findAllBy<fieldName> string $value findAllBy 或者 findBy 后面可以跟变量, 它大概的方法就是使用了三个核心内置函数: __call, method_exists() 和 call_u… Read More

MySQL入门 (七) : 储存引擎与资料型态

1 表格与储存引擎 表格(table)是资料库中用来储存纪录的基本单位,在建立一个新的资料库以后,你必须为这个资料库建立一些储存资料的表格: 每一个资料库都会使用一个资料夹,这些资料库资料夹用来储存所有资料库各自需要的档案: 「Storage engine、储存引擎」是MySQL用来储存资料的技术,为了资料库多样化的应用,你可以在建立表格的时候,依照自己的需求指定一种储存引擎,不同的储存引擎会有不同的资料储存方式与运作的特色。 MySQL提供许多储存引擎让你选择,下列是主要的三种储存引擎的简介: MyISAM:MySQL预设的储存引擎,虽然它支援的功能并没有像一般的资料库那么多(例如交易、transacti… Read More

MySQL入门 (六) : 字元集与资料库

1 Character Set与Collation 任何资讯技术在处理资料的时候,如果只是单纯的数值和运算,那就不会有太复杂的问题;如果处理的资料是文字的话,就会面临世界上各种不同语言的问题。 以资料库来说,它必须正确的储存各种不同语言的文字,也就是一个资料库中,有可能同时储存繁体和简体中文、法文等不同语言的文字。 电脑在处理文字资料大多是使用一个「编码」来表示某一个字,对MySQL资料库来说,为了要处理不同语言的文字,它使用一套编码来处理一种语言的文字,称为「字元集、character set」。 以英文字母来说,每一个字母都有一个编码,例如A=65、B=66、C=67。 MySQL可以依照你的需要为资料库… Read More

MySQL入门 (五) : CRUD 与资料维护

1 取得表格资讯 1.1 DESCRIBE指令 「DESCRIBE」是MySQL资料库提供的指令,它只能在MySQL资料库中使用,这个指令可以取得某个表格的结构资讯,它的语法是这样的: 你在MySQL的工具中执行「DESC cmdev.dept」指令以后,MySQL会传回「cmdev.dept」表格的结构资讯: 1.2 栏位顺序 每一个表格在设计的时候,都会决定它有哪一些栏位,和所有栏位的详细设定。 另外也会决定表格中的栏位顺序,知道表格栏位顺序在接下来的讨论中是很重要的: 注:如何建立一个新的表格会在「第八章、表格与索引」中讨论。 2 新增 2.1 基础新增叙述 新增资料到资料库的表格中使用「INSERT」叙述,下列是这个… Read More

MySQL入门 (四) : JOIN 与UNION 查询

1 使用多个表格 在「world」资料库的「country」表格中,储存世界上所有的国家资料,其中有一个栏位「Capital」用来储存首都资料,不过它只是储存一个编号;另外在「city」表格中,储存世界上所有的城市资料,它主要的栏位有城市编号和城市的名称: 虽然「country」表格自己没有储存城市名称,不过它可以使用「Capital」栏位的值,对照到「city」表格中的「ID」栏位,也可以知道城市的名称。 在这样的表格设计架构下,如果你想要查询「所有国家的首都名称」: 这样的查询需求就称为「结合查询」,也就是你要查询的资料,来自于一个以上的表格,而且两个表格之间具有上列讨论的「对照」情形。 2 Inner… Read More

PHP: 关键字global 和 超全局变量$GLOBALS的用法、解释、区别

$GLOBALS 是一个关联数组,每一个变量为一个元素,键名对应变量名,值对应变量的内容。$GLOBALS 之所以在全局范围内存在,是因为 $GLOBALS 是一个超全局变量。 php语法中,很多人都认为global和$GLOBALS只是写法上面的差别,其实不然 根据官方的解释是 1. $GLOBALS[‘var’]是外部的全局变量本身 2. global $var是外部$var的同名引用或者指针。 举例说明一下: <?php $var1 = 1; $var2 = 2; function test(){ $GLOBALS['var2′] = &$GLOBALS['var1′]; } test(); ech… Read More

MySQL入门 (三) : 运算式与函式

运算式(expressions)已经在查询叙述中使用过,例如算数运算与「WHERE」子句中的条件判断。 虽然目前只有讨论查询资料的部份,不过你在任何地方都有可能使用运算式来完成你的工作。 一个运算式中可以包含值(literal values)、运算子和函式,都会在这里讨论它们的细节与应用。 1 值与运算式 不论在执行查询或资料异动的时候,你都可能会使用各种不同种类的值(literal values)来完成你的工作: 不同种类的值会有不同的用法与规定,可以搭配使用的运算子和函式也不一样。 根据资料类型可以分为下列几种: 数值:可以用来执行算数运算的数值,包含整数与小数,分为 精确值与近似值两种 字串:使用单引号或双引号… Read More

MySQL入门 (二) : SELECT 基础查询

1 查询资料前的基本概念 1.1 表格、纪录与栏位 表格是资料库储存资料的基本元件,它是由一些栏位组合而成的,储存在表格中的每一笔纪录就拥有这些栏位的资料。 以储存城市资料的表格「city」来说,设计这个表格的人希望一个城市资料需要包含编号、名称、国家代码、区域和人口数量,所以他为「city」表格设计了这些「栏位(column )」: 储存在表格中的每一笔资料称为「列(row)」或「纪录(record)」: 在设计表格的时候,通常会指定一个栏位为「主索引键(primary key)」: 注:主索引键会在「第八章、表格与索引」中详细的讨论。 1.2 认识资料型态 资料库中可以储存各种不同的资料,SQL提供许多不同的「资料… Read More

MySQL入门 (一) : 资料库概论与MySQL的安装

1. 储存与管理资料 储存与管理资料一直是资讯应用上最基本、也是最常见的技术。 在还没有使用电脑来管理你的资料时,你可能会使用这样的方式来保存世界上所有的国家资料: 这样的作法在生活中是很常见的,例如亲友的通讯录,你可能也会使用一张卡片来记录一个亲友的通讯资料,上面有名字、电话、住址,与所有你想要保存的资料。 这种保存资料的方式很直接,也很省钱。 不过你应该会遇到这样的问题: 如果你买了一台电脑,电脑中也安装了一种工作表的软体,像这类国家或是亲友通讯录的资料,可能就会用这样的方式把它们储存在电脑里面: 使用这种工作表来储存国家资料,当然比用卡片好多了,尤其是想要寻找某个国家的资料,然后修改它的人口数量。 虽然方… Read More

MySQL入门 (九) : 子查询 Subquery

1 一个叙述中的查询叙述 子查询(subquery)是一种很常见的应用,不论是查询、新增、修改或删除都有可能出现。 子查询是一个放在左右刮号中的「SELECT」叙述,而这个查询叙述会放在另一个SQL叙述中。 在执行一些工作的时候,使用子查询可以简化SQL叙述。 以查询「人口比美国多的国家」来说,你要先执行下列查询美国人口数量的叙述: 知道美国人口数量以后,再执行下列的叙述就可以传回人口比美国多的国家了: 以这样的查询来说,你要执行两次查询叙述来完成这个工作。 不过遇到类似这样的需求时: 你就可以考虑把它们写成一个叙述就可以了: 上列的范例是一种很常见的子查询应用,使用子查询的好处是不用执行多次查询就可以完成工作,… Read More

PHP7革新与性能优化

有幸参与2015年的PHP技术峰会(PHPCON),听了鸟哥(惠新宸)的关于PHP7的新特性和性能优化的分享,一切都令人感 到激动。鸟哥是国内最权威的PHP专家,他的分享有很多非常有价值的东西,我通过整理分享的PPT和收集相关资料,整理为这篇解读性质的技术文章,希望能 给做PHP开发的同学一些帮助。 PHP已经走过了20年的历史,直到今天,PHP7都发布了RC版,据说,PHP7正式版应该会在2015年11月份左右发布。PHP7对于上一个系列的PHP5.*,可以说是一个大规模的革新,尤其是在性能方面实现跨越式的大幅提升。 PHP是一种在全球范围内被广泛使用的Web开发语言,PHP7的革新也当然会给这些W… Read More

Mysql: 图解 inner join、left join、right join、full outer join、union、union all的区别

对于SQL的Join,在学习起来可能是比较乱的。我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚。Coding Horror上有一篇文章,通过韦恩图(Venn diagram,可用来表示多个集合之间的逻辑关系)。解释了SQL的Join。我觉得清楚易懂,转过来。 假设我们有两张表。Table A 是左边的表。Table B 是右边的表。其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同 A表 id name 1 Pirate 2 Monkey 3 Ninja 4 Spaghetti B表 id name 1 Rut… Read More

Comet 反Ajax: 基于jQuery与PHP实现Ajax长轮询(LongPoll)

传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。 反转AJAX,就是所谓的长轮询或者COMET。服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端。 Comet是一种服务器向页面推送数据的技术,Comet能让信息近乎实时的被推送到页面上。 前端 index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title&g… Read More