PHP、MYSQL编程笔记

开发StatPressCN过程中恶补PHP和MYSQL知识,水平不行,只好边干边学,呵呵。对一些基础不高深的东东简单梳理下,免得忘了下次重来。

一、MYSQL

  1. 用MYSQL语句直接修改数据。update `db_name` set `urlrequested` = replace(`urlrequested`,’\”,”) where `urlrequested` like “%\'”,把以’结尾的链接请求末尾的’去掉。replace可以保证key的连续性,如果先删除后添加就没有这个好处了。
  2. 插入记录。INSERT INTO users(name, age) VALUES(‘姚明’, 25), (‘比尔.盖茨’, 50), (‘火星人’, 600);如果values中为空,则添加默认值为基础的记录。
  3. 更新记录。需要配合where条件判断。UPDATE users SET age = 30 WHERE id = 12;以上语句都很危险,如果where没有设置的话会更新所有的数据记录,所以在进行类似操作的时候一定要先备份,再审慎
  4. 删除数据有两个命令delete和TRUNCATE。DELETE FROM users WHERE name = ‘Mike’ ORDER BY id DESC LIMIT 6;如果有自动增加的字段,用没有where的delete和truncate都会让这个字段从0开始,如果不想这样,可以用带where 1的语句,不过那样的执行效率很多,因为需要遍历整个数据库的所有记录;删除数据时如果使用形如like ‘$tmpstr%’的语句,一定要判断下$tmpstr是否为空,否则很危险,可能删除掉所有数据,后果严重的很。
  5. 正则表达式在where语句中也可使用,好爽,这下me对正则表达式的学习可以用了。官方文档参见这里。

二、PHP

  1. 分开字符串。$p = explode(“=”,$url);
  2. 打印出数组中的所有元素。print_r($p);
  3. 计算数组中的元素个数。count($p);
  4. 数组运算,类似于java中集合的概念,很方便。生成一个空数组:$bloglist = Array();向数组中增加一个或几个元素(从末尾):array_push($bloglist,$matches[1]);添加到数组头部之前则是array_unshift($bloglist,$matches[1]) ;从数组尾部删除一个元素用array_pop(),从头部删除一个元素则用array_shift();让数组中元素唯一(即无重复元素,类似于结合set的概念):$bloglist = array_unique($bloglist);迭代输出每个元素可以在foreach中使用as:foreach($bloglist as $blog);判断某元素是否在数组中:in_array($lookingFor, $bloglist),返回布尔值真假;数组中每个元素都有个默认的key,可以这样输出看看:while (list($key,$value) = each($bloglist)) {echo “$key : $value<br>”;};还可以合并多个数组$bloglistall = array_merge($bloglist1, $bloglist2);得到两个数组的交集可用array_intersection($bloglist1, $bloglist2);差集可用array_diff($bloglist1, $bloglist2);如需要合集则先array_merge(),然后再用一次array_unique();对数组进行排序则用sort($bloglistall),默认是英文字母顺序;数组的key必须是唯一的,并且key可以设定为字符串,默认是整数。关于数组,更详细的阐释是Array的官方说明(e文版)。
  5. 奇妙的类型自动转换。print(“8&heart5″+20);输出结果为28。
  6. 字符串函数:strlen,得到字符串长度;substr($v,start_pos,length),截取指定长度的字符串,不指定长度则自动取到末尾;strripos($v,”postname”),是否包含指定子字符串,返回所处位置或;sscanf,扫描规律字符串得到相应变量;printf,格式化输出字符串;str_replace,替换子字符串;strstr,找到特定子字符串出现的位置;rtrim会删除末尾的空格和换行等字符,包括空格、\t、\n、\r、\0、\x0b;explode会自动处理行尾的空字符。
  7. 正则表达式。ereg(‘^/[0-9]{4}/[0-9]{2}/{0,1}$’,$out_url);匹配/2008/10
  8. 时间函数。println(strtotime(“now”));输出1224902867,然后用date函数格式化println(date(“c”,$d1));输出2008-10-24T18:03:42+08:00,println(date(“r”,$d1));输出Fri, 24 Oct 2008 18:03:42 +0800,如果用gmdate则输出格林威治标准时,println(gmdate(“r”,$d1));输出Fri, 24 Oct 2008 10:03:42 +0000;其中时区信息是通过date_default_timezone_set(‘prc’);设定的,prc指中国大陆,也可以是其他,有效值列表见这里;另外strtotime还可以对时间做修正,比如strtotime(“3 October 2005”)和strtotime(“1 days”,strtotime(“2 October 2005”))输出的结果都是一样的,可以用的修正符号有“+1 week 3 days 7 hours 5 seconds”,可以用+-号。
  9. file打开某个文件并把每行读入数组;fopen打开一个文件返回句柄,可以设定打开方式为读或者写,打开后内容置空;fwrite则写入内容,成功则返回true,否则是false;操作完毕后需要fclose关闭句柄。

三、WordPress

  1. get_option直接得到选项值,不用每次用mysql语句查询。
  2. get_permalink($id)得到帖子的固定链接地址,注意是包含域名的绝对路径,如果需要相对路径,则需要str_replace(get_bloginfo(“url”),””,get_permalink($id));
  3. update_option如果该项不存在会自动建立。技巧:如果不能确定某个选项是否存在,则可以先update后再delete。
  4. 数组可以一次性存入option中,存储形如a:2:{s:5:”title”;s:8:”my titile”;s:4:”body”;s:12:”Home is warm”;},a指的数组,2是元素个数,title是key名称,5是字符串长度,my titile是title的值,后面body同。
  5. 要调用插件或主题中的函数必须进入wp的主题运作机制,直接调用是无效的,出于安全考虑,同时也是因为无法得到相关环境设定和变量。官方提供的方式是模板,比如您可以自己定义一个page的新模板,然后创建page是选择新模板就可以了。模板标头有特殊要求,见这里
  6. php代码执行其实是以用户权限进行的,因为可以获取文件的在服务器上的本地地址并进行读写操作。

四、HTML

  1. 因为php可以控制输出逻辑,因此可以尽量使用html代码而不是通过php的echo或print输出,这样页面逻辑更清晰,也容易调试。
  2. 表格需要设定宽度后,表格单元中的左对齐右对齐才能起作用。
  3. input type=checkbox name=’statpress_showhotdepth’ value=’checked’ xxx

五、CSS

  1. 样式表嵌入标签的方法。<table class=’mytable’>……</table>,这种情况下mytable应该在外链的css或者当前页面自定义的css中已经定义过;或者直接写style:<table style=”outline:dotted 1px green;”>……</table>
  2. 在形如#sidebar h2{……}中,仅对那些class是sidebar中出现的h2才起作用。

作者: heart5

生命如歌,我自徜徉。

发表评论

电子邮件地址不会被公开。 必填项已用*标注