PHP与MySQL入门

一直想了解网站的后台技术,直到最近才花了20天左右学完了《PHP6和MySQL5基础教程》。之所以看这本书,只是因为图书馆借不到号称“圣经”的那本书,然后这本书综合来看,入门靠谱。不过读完之后,觉得关于前端方面的过时了,毕竟是五六年前的书了,但是PHP6又超前了,到现在迟迟未出,总体感觉,入门尚可。当然只是入门,学好基础还是得读一本知识点全面的书,比如那本号称“圣经”的书,还要经常翻阅手册才行。想到这里,觉得学某项计算机或互联网技术的读书顺序就是“入门”——“基础”——“进阶”。入门指那些只包含部分常用知识点的书,市面上其实最不缺这方面的垃圾书籍了,所以得慎重选择,一般读一本或者能力高点的跳过直接读基础类书籍。基础类指那些知识点全面的书籍,通常很厚,比入门厚一倍或更多,写这类书籍需要深厚的积淀,所以市面上属于此类的书不多,也读一本即可。进阶类重点写技术某个分支或从某方面剖析,这类书籍国外作者出版的居多,此阶段也需要更多的结合实践。

不扯了,还是总结下学到了哪些知识点吧!

1. 运行平台的安装与配置

此书选择的是XAMPP,其他Windows平台还有WAMP、AppServ,傻瓜式安装,百度更有一大片教程。安装好之后是设置MySQL的root密码,通常还会为每个数据库创建具有限制权限的用户。

2. PHP基础

4种标签:<?php … ?>、<? … ?>、<script language=”php”></script>、<% … %>

单引号与双引号区别:单引号除了\’与\转义之外,其他字符直接打印;双引号会用变量值替换变量名称,转义字符均有效

函数名:不区分大小写

注释:单行#(shell风格,头部信息常用)或//,多行/* … */

变量命名:必须以美元符号$开头紧接字母或下划线,只能包含字母、数组或下划线,无需声明

String:连接字符串用点号“.”,不过“.=”这种写法点容易忽略,不如其他语言中的“+=”;相关函数有strlen(),strtolower(),strtoupper(),ucfirst(),ucwords()

Number:复杂运算可用圆括号明确运算符优先级,处理小数精度不高,可换成整数;相关函数有numberformat(num, decimaldigits)

Constant:不加美元符号,通常全部大写,不能放在引号中

表单验证:isset()检测某个变量是否存在;empty()若传入的值为空字符串、0、false、NULL就会返回true;is_numeric()检测值是否为数字

数组:索引数组和关联数组,其中包含在双引号中的关联数组项应该用花括号包住

循环与遍历:for,while,do…while三种循环,foreach遍历数组

获取表单值:$GET[‘name’]获取以GET方式传递的值,$POST[‘name’]获取以POST方式传递的值

包含文件:requirce()关键性的包含文件,如数据库访问;include()一般包含文件,如header.html;*_once()会检测文件是否已存在

数组与字符串转换

$array = explode(separator, $string);

$string = implode(glue, $array);

处理表单:使用隐藏的输入框来测试表单是否提交,从而执行不同的代码

3. MySQL和数据库基础

管理数据库方式:MySQL控制台或phpmyadmin

关键字:CREATE DATABASE|TABLE,USE,SHOW,INSERT,SELECT,UPDATE,DELETE,WHERE,ORDER BY,LIMIT,DROP,LIKE,TRUNCATE,GROUP BY,ALTER

MySQL函数:NOW(),SHA1(),CONCAT(),TRIM(),DATE_FORMAT(),SUBSTRING(),RAND(),ROUND()等

执行联结:内联结(INNER JOIN … ON …);外联结(LEFT/RIGHT JOIN … ON …)

存储引擎:也是表的类型,常见有MyISAM(Linux/Max默认)、InnoDB(Windows默认)

FULLTEXT查找:基本的字符串匹配

执行事务:可以设置起点和终点,从而可以回滚,即取消会话期间的一系列操作,语句有START TRANSACTION,ROLLBACK,COMMIT(一旦提交,事务会话期间操作不能回滚了)

4. 错误处理与调试

确定技术领域:可能有HTML,PHP,SQL,CSS,JavaScript,甚至服务器

PHP常见错误

  • 空白页面:HTML问题或PHP错误,并关闭了display_errors
  • 解析错误:分号、括号不对称,字符串使用未转义的引号
  • 空变量值:忘记开头$,变量名拼写错误
  • 调用未定义的函数:函数名拼写错误,PHP未配置正确
  • 不能重新生命函数:包含文件中已定义函数
  • 附一些错误报告关键字及错误原因:
  • unexpected end file: 少花括号
  • upexpected 'echo', 'if': 少分号";"
  • 网页头部空白:是因为以utf-8 BOM编码的php文件,应改为utf-8无BOM编码
  • 找不到mysqli 说明数据库无法连接
  • 同一个页面先连接然后关闭,再连接(两次用require_once(MYSQL))似乎有问题
  • mysqlinumrows()和mysqliaffectedarray()等expects parameter 1 to be
  • mysqli_result,可能就是查询未成功,语法可能有错误
  • 对于代码中用到的查询语句应该在控制台或其他界面中执行查询,看是否能成功

错误处理与调试相关函数

  • error_reporting():设置错误报告级别
  • seterrorhandler():指定出现错误时调用的函数,从而可以自定义错误处理程序
  • define(‘LIVE’, FALSE):LIVE用来指示站点是否上线运行<?>
  • mysqli_error($dbc):报告数据库查询方面的错误

5. PHP技术

日期:设置默认时区,时区与本地化,各类日期函数,日期格式化输出

上传文件:文件上传配置,上传目录通常在Web目录之外,$_FILES超全局变量,要注意上传文件的表单应当包括enctype属性

Cookie:setcookie()设置或清除cookie,$_COOKIE取得cookie的值

SESSION:开始会话sessionstart(),会话变量$SESSION,终结会话使用unset()或session_destroy()函数

Email:这个目前还没试验成功,安装了个hmailserver邮件服务器,却没配置成功,还导致MySQL根密码不能用,弄了几个小时才发现的。

标页码:分页技术很常见,就是利用URL传递数值和LIMIT x,y 语句

表格数据排序:ORDER BY语句

多语言版本:网站关键位置的各语言版本存储在数据库中,通过自动检测或用户选择使用何种语言,涉及到字符集、时区、编码、日期显示、排序等基础

输出缓冲:为了一次把解析好的页面发送给用户代理,obstart()、obendflush()、obend_clear()

6. Web安全

基本原则

  • 不要把用户ID存储在cookie中
  • 不要显示详细的出错消息
  • 使用加密技术
  • 保护所有目录和文件
  • 不要存储信用卡号、银行业务、身份证号等信息
  • 若需要,可使用SSL

常见攻击:垃圾邮件,XSS,SQL注入攻击,蛮力攻击,DDoS攻击

看完之后才觉得刚刚开始,手册里好多函数见都没见过,面向对象开发还是搞不懂怎么回事,正则方面一直是弱点,Ajax方面需要学习与实践,数据库设计得看一两本书,PHP与HTML的分离设计,研究一两个开源PHP系统哦,还有最近打算学的一个伪静态技术。