2008年7月31日 星期四

 

PHP Day 8

EXPLAIN



id

select_type

table

type

possible_keys

key

key_len

ref

rows

Extra



关联优化器

$myisamchk --analyze pathtomysqldatabase/table

$myisamchk --analyze pathtomysqldatabase/*.MYI

$myisamchk --analyze pathtomysqldatabase/*/*.MYI

mysql>analyze table tablename1, tablename2, ...;



将列创建为索引

ALTER TABLE table ADD INDEX (column);



表的优化

mysql>OPTIMIZE TABLE tablename;

$myisamchk -r table

$myisamchk --sort-index --sort-records=1 pathtomysqldatabase/*/*.MYI



备份数据库

1. LOCK TABLES table lock_type [, table lock_type ...]

锁定类型 READE / WRITE,备份之前必须执行 FLUSH TABLES。

*******没明白*******

以文件方式备份



2. $mysqldump --opt --all-databases > backup-file.sql

再,停止 mysqld 进程,通过 --log-bin[=logfile] 重新启动进程。日志将记录备份后数据库发生的变化。

*******还是没明白*******



3. $mysqlhotcopy database /path/for/backup

再,停止 mysqld 进程,通过 --log-bin[=logfile] 重新启动进程。日志将记录备份后数据库发生的变化。

*******模模糊糊*******



恢复 MySQL 数据库

使用了方法 1,可将数据文件重新复制到安装 MySQL 的相同位置。

使用了方法 2,首先在导出文件中运行查询(???)从而将数据库重新构建至导出时的状态,接着将数据库更新至保存在二进制日志文件中的状态 —— $mysqlbinlog hostname-bin.[0-9]* | mysql

*******没明白*******

先 $mysql db_name < backup-file.sql 将转储文件读回到服务器,然后再更新。



设置主服务器和从服务器,略过



--eof--



p.s. 这一章基本没怎么看懂 :sad:

p.s.2 貌似小站被墙了 :shock:

意外发现 WordPress 彩蛋,已经有人发现了 http://www.youtube.com/watch?v=gkF4WLSkz-U

标签:


 

PHP Day 7

抽象类(abstract class): 不能被实例化.

抽象方法(abstract operation): 只提供了一个方法的声明, 但是不提供方法的具体实现.

包含抽象方法的任何类自身必须是抽象的.



使用 PEAR::DB 抽象类与数据库进行交互



安装: $sudo apt-get install php-pear

检查最新版本: $pear list-upgrades

升级 DB: $sudo pear upgrade DB



require_once('DB.php'); # set for using PEAR DB

$dsn = "mysqli://$user:$pass@$host/$db_name"; # set up DSN

$db = $DB::connect($dsn); # connect to database



与实例化 mysqli 类连接数据库相比其实都差不多.



Prepared 语句向 MySQL 发送需要执行的查询模板, 再单独发送数据.

$query = "insert into table values(?, ?, ...)";

$stmt = $db->prepare($query);

$stmt->bind_param("sssd", $value1, $value2, ...);

$stmt->execute();

$stmt->affected_rows;



除了 bind_param()[insert?] 还有 bind_result() [select?] 函数.



注意! 一定要细心! 下面使用上面的变量, 拼写要正确, 不要想当然 :mrgreen:

标签:


2008年7月28日 星期一

 

PHP Day 6

设计 Web 数据库



列(Column), 又称域或属性.



行(row), 也称为记录.



表中的标志列称为键(key), 一个键可以由不止一列组成. 主键(primary key)和外键(foreign key). 考虑要建模的实际对象, 避免保存冗余数据(避免 3 种更新不规则: 修改, 插入, 删除). 使用原子列值, 每行的每个属性只储存一个数据. 确认所选择的键是唯一的, 要有意义, 事先考虑需要询问数据库的问题. 避免空属性的设计.



Web 数据库架构, 暂不讨论.



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



创建 Web 数据库(仅学习 MySQL 数据库)



登录 MySQL Monitor: $mysql -h hostname -u username -p



-h 希望连接的主机, 默认为本机(localhost)

-u 登录时的用户名(可以不是 root)

-p 提示需要密码



创建 root:

$mysql -u root

mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');

mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');



删除匿名用户:

mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';



创建数据库: mysql> create database dbname;

(注意, 不能忘记分号!)



创建用户(最少权限原则):

GRANT privileges [columns]

ON item

TO user_name [IDENTIFIED BY 'password']

[REQUIRE ssl_options]

[WITH [GRANT OPTION | limit_options] ]



用户权限(PMWD3rd P164), 管理员权限(PMWD3rd P164), 特别权限(ALL, USAGE).



收回权限:

REVOKE privileges [columns]

ON item

FROM user_name



使用指定数据库:

mysql> use dbname;

或者

$mysql -D dbname -h hostname -u username -p





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



创建数据库表, 略过. :mrgreen:



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



插入数据(INSERT):

INSERT LOW_PRIORITY DELAYED IGNORE [INTO] table [(column1, ...)] VALUES (value1, ...);



注意: 会按顺序插入数据.

向指定列插入数据:

insert into tablename (column1, column2, ...) values ('value1', 'value2', ...);

或者

insert into tablename set column1='value1', column2='value2', ...;



将脚本插入数据库:

$mysql -h host -u username -p < name_insert.sql



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



获取数据(SELECT):

略过. :mrgreen:



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



更新数据库记录:

UPDATE



创建后修改表:

ALTER TABLE



删除:

DELETE

DROP



--eof--

标签:


 

Dict in Ubuntu

最近经常上英文网站,本来一直使用 Baidu 内嵌的 Dr.eye,后来发现不太方便于是安装了 dict.cn 的网页划词。但这两天 dict.cn 的服务器似乎有问题,老是查不到词汇(而且使用在线划词会把 firefox 搞死……)。于是乎上网查了一下,发现在 Linux 上可以用 terminal 查单词,除了没发音该有的都有。



实际上用的是 dict 开放协议。



$sudo apt-get install dict #客户端 (在 /etc/dictd/dict.conf 注释掉服务器,让其只使用本地读字典)

$sudo apt-get install dictd #服务器端

$sudo apt-get dict-xdict dict-stardic dict-gcide #三个字典文件




最后使用 $dict word 就可以查单词了,退出按 Q 键。



参考:http://blog.cathayan.org/item/1715



p.s. 今早遇到件特不愉快的事

标签:


2008年7月26日 星期六

 

PHP Day 5

就着教程和 PHP Manual 磕磕绊绊把 PHP 的基础知识了解了一遍(只能算是了解)。



没想到在最后又被卡了一下——Object Iteration。我始终没明白 Iterator 的处理机制,也没理解 IteratorAggregate 和 Iterator 的区别。在 Google 上大概查了下,貌似都是 Manual 的拷贝,所以只能先把这块儿放下。



教程和 Manual 相比各有千秋吧,Manual 的实效性当然是最棒的,上面的例子也比教程的简单一些。不过 Manual 说到底还是有些干巴。另外语言也是一道不宽不窄的障碍,如果英语再好一些也许就可以放下教程,User Contributed Notes 更有人情味 :mrgreen:



接下来还是打算跟着教程走(PHP Manual 上不会有 MySQL 手册吧 :grin: ),学习有关数据库的知识。



就先这么计划了,也不知道这个速度快不快,我是觉得自己有点心急,嗯欲速则不达,心态平和。



update:迭代器好像是把 foreach 的实现方法一步一步展示出来,只是不知道迭代器的流程怎么这么怪。

标签:


2008年7月25日 星期五

 

PHP Day 4

从下篇起不再使用首字下沉(first-letter 伪类应该不被 IE6 支持吧 :mrgreen: )。





$c = new myClass;



在以前的 PHP 版本中可以这样创建一个新类并将该类的实例复制给 $c?这样做的坏处是“假设对象是按引用传递对象的,尤其是在向函数传递对象时,这种行为可能会导致问题”,会导致什么问题?这句话貌似在逻辑上有问题,例子明明是按值传递对象的么。



select_object()->display();



“select_object()方法返回了一个具有display()方法的对象”——“属性可以与成员变量和特性这些词交替使用,操作也可以与方法交替使用”——我恨交替使用



类的设计——看代码能明白,自己写又忘了 :sad:

标签:


2008年7月24日 星期四

 

PHP Day 3

我知道困难就在不远处,只是没想到来的这么快。





遇到的第一个难点是“递归函数”,所谓递归函数就是函数自己调用自己,概念很简单,但要理解却是另外一回事儿了。十分感谢 fcicq 的指导,同时也感谢他告诉我一个新的天地 :mrgreen:



第二个难点是刚刚碰到的,面向对象。这玩意儿比递归函数抽象多了,而且我之前也没有接触过面向功能、面向过程,也就无从知晓这个“面向对象”的好处。由面向对象又引出了很多新鲜概念(于我而言),到了“类”又卡壳半天,然后是如何访问属性。不明白为什么从类的外部直接访问类的属性不好,也就不明白什么是“封装”。



好吧,睡觉,明见 :!:



update:

嗯,重看一遍果然有所收获,虽然还是不太明白面向对象的好处,但感觉对数据的使用确实方便不少。

原来很简单就可以实现对属性和操作的调用,昨天晚上咋就没明白捏。



看来需要找一些基础理论来看看了 :grin:

标签:


2008年7月23日 星期三

 

PHP Day 2

虽然学习速度不是很快,但自己感觉还是有很大收获。PHP 的确不难学,当然到目前为止我只是学习了一些基本的函数,明天进入简单的函数编写单元。我想最大的问题是如何把这些函数记住,现在能想到的办法就是去查 manual。





另外,vim 是一个很不错的编辑器,如果加上自动闭合、每段可以折叠就更好了~



VIM



p.s.原来正则表达式在某些时候比字符串函数效率要低啊,看来对什么都不可迷信 :wink:

标签:


2008年7月19日 星期六

 

第一个实例

PHP in gVim



照着书上写的,第一步,不知道自己能走多远。


标签:


 

PHP Day 1

以前总想一步登天,结果发现死的比较难看。





Vim算马马虎虎上手了,20 分钟前才学会复制。对自己的记忆力表示强烈质疑,或者是条件反射训练不够?



书是 05 年出的,照着书动手抄了第一个实例——Bob's Auto Parts,结果被 fcicq 同学发现 XSS,我就无语了。从小学到大学还有很长的路要走啊。

标签:


This page is powered by Blogger. Isn't yours?

订阅 帖子 [Atom]