php初学者常见问题不在语法而在环境配置、超全局变量误用、sql注入防护缺失及错误提示被屏蔽;典型如$_post为空因缺name属性、ajax未设content-type、variables_order配置异常、mysql_*函数废弃、白屏因display_errors关闭等。

PHP 编程本身不难上手,但“容易写出来”和“写得安全、可维护、能上线”是两回事。初学者常卡在环境配置、超全局变量理解错、SQL 注入没意识、错误提示被屏蔽这些地方,而不是语法本身。
为什么 $_POST 和 $_GET 拿不到数据?
这是新手最常遇到的阻塞点,往往不是代码写错了,而是请求方式或服务器配置不匹配:
- 表单
method写成"post"(小写)但 PHP 只认大写的POST—— 实际不影响,但容易让人怀疑大小写敏感;真正问题是没加name属性:<input type="text">不会提交,必须是<input type="text" name="username"> - 用 AJAX 提交时没设
Content-Type: application/x-www-form-urlencoded,导致$_POST为空,此时得用file_get_contents('php://input')手动读原始体 -
php.ini中variables_order被改过,或者register_globals = On(已废弃)干扰了变量注入逻辑
mysql_connect() 报错:Call to undefined function?
这个函数从 PHP 7.0 起就彻底移除了,不是你环境没装好,是它已经不存在了。继续搜旧教程会越学越懵:
- 替代方案只有两个:
mysqli(过程式或面向对象)或PDO;推荐直接学PDO,因为支持预处理、多数据库切换、异常模式更可控 - 别再用
mysql_real_escape_string()做“防注入”——它不能覆盖所有上下文,且依赖连接资源,而 PDO 预处理才是正解 - 如果看到示例里还有
@mysql_connect(),那个@只是压制错误,不是解决错误
为什么本地能跑,上传到服务器就白屏?
白屏 ≠ 代码错,大概率是错误报告被关了,或者路径/权限/扩展不一致:
立即学习“PHP免费学习笔记(深入)”;
- 检查服务器是否开了
display_errors = Off(常见于生产环境),临时加一句ini_set('display_errors', '1'); error_reporting(E_ALL);看真实报错 -
include或require的路径用了相对路径(如./config.php),但执行脚本位置变了,__DIR__比.更可靠 - 扩展缺失:本地有
mbstring,服务器没开,调用mb_strlen()就挂;用extension_loaded('mbstring')提前判断比硬调用安全
真正卡住人的从来不是 echo 或 for 怎么写,而是对请求生命周期、数据流转边界、错误可见性这些隐性规则缺乏感知。调试时先确认“PHP 知道自己在哪出错”,比急着改逻辑重要得多。











