搞网站踩坑实录
今天搞PHP+MySQL整网站,差点被几个老毛病气死。本来想偷个懒用现成模板,结果数据库连不上,页面报错都看不懂。得,老老实实动手排雷。
头号难题:连不上数据库
刚把php文件丢服务器,直接弹个警告说连接拒绝。打开代码瞅了眼:
- 密码明明对着配置文件抄的,愣是显示错误
- localhost死活连不上,换成127.0.0.1立马通了
- 端口3306写着,结果服务器那边配的是3307
气得我打开phpmyadmin比对了半小时,发现mysql_connect这函数早淘汰了!换成mysqli写上参数,才听见数据库"叮咚"接通的声儿。
表单提交变天书
注册页面刚测试就翻车:中文输进去存数据库全变问号。查了三点终于破案:
- 数据库建表用latin1,网页用UTF-8打架
- PHP文件开头没写header("Content-type:text/html;charset=utf-8")
- mysqli_query("set names utf8")这行漏了
改完还不放心,在每个PHP文件头顶都插了编码声明,现在输入"饕餮"都能存进去了。
注入攻击防不住
同事拿我的登录框使坏,输入' or 1=1 -- 直接进后台了。赶紧把$_POST全抓出来处理:
- 字符串用mysqli_real_escape_string过筛子
- 数字强制转成intval才往SQL里塞
- 改用手写SQL语句绑定参数
现在就算输';DROP TABLE users;--这种炸弹,系统也当普通字符存。
挣扎:分页崩溃
展示用户列表时分页按钮全灰的。原来limit offset算错位:
- MySQL从0开始数行,我按页码1乘以每页量算
- 没过滤负数页码,用户输-5直接崩
- 总数除每页量结果没向上取整
改成(当前页-1)每页数量,再加个max(0,?)防负数,这才老老实实翻页。
意外插曲
搞到半夜两点准备收工,组长非让改个需求。我说这套方案能抗住200人并发,他偏说技术选型太原始。当场顶回去:"微信第一个版本还是PHP写的!" 结果甲方验收时疯狂点提交,页面愣是没崩。昨天组长约我吃饭说涨薪,我反手把简历挂上了招聘网站——这破事儿让我想起去年被外包公司坑的经历,明明说好做前后端分离,入职发现要维护祖传PHP代码,连composer都没装。这回自己趟完坑,终于能怼着脸说:PHP搞网站,真不寒碜!





