引言:为什么有人放弃 PHP,而有人却靠它赚钱
\n\n你决定学习 PHP。这是个很棒的选择!互联网上 78% 的网站都运行在这个语言上——从简单的博客到像 Facebook(差不多)这样的巨头。但有一个问题:许多新手都会犯同样的错误,这些错误会让学习变成一场噩梦。
\n\n为什么会这样?PHP 是一个狡猾的语言。它原谅愚蠢的错误,但不原谅对基本原则的无知。你写了代码,它能运行,网站能加载——你以为一切都很棒。但一个月后,你无法理解自己那 500 行混乱的代码,而你的网站在 5 分钟内就被黑了。
\n\n在这篇文章中,我将分析 学习 PHP 时最常犯的 5 个错误,这些都是新手容易犯的。我会展示真实的代码示例,解释为什么这样做不好,并给出具体的解决方案。如果你在其中任何一点上看到了自己的影子——别灰心,这很正常。只要改正就好。
\n\n错误 #1:将 PHP 和 HTML 混在一个文件中,没有结构
\n\n这是经典错误。新手会写出类似这样的代码:
\n\n<?php\n$username = "伊万";\necho "<html><body><h1>你好," . $username . "!</h1>";\n?>\n<p>这是 PHP 之后的文本</p>\n<?php\necho "</body></html>";\n?>\n\n看起来能运行。但如果你尝试在这里添加循环、条件语句、十个页面——你就会淹没在标签和 echo 的混乱中。这样的代码无法阅读、维护和调试。
\n\n为什么这样不好?
\n- \n
- 违反了职责分离原则(MVC)。 \n
- 只要设计稍有改动,你就得重写一半的逻辑。 \n
- 代码编辑器会因为混合标签而混乱。 \n
正确做法是什么?
\n使用模板化。即使没有框架,也可以将逻辑与表现分离:
\n\n<?php\n// logic.php\n$data = ['name' => '伊万', 'age' => 25];\ninclude 'template.php';\n?>\n\n<!-- template.php -->\n<!DOCTYPE html>\n<html>\n<body>\n <h1><?= htmlspecialchars($data['name']) ?></h1>\n <p>年龄:<?= $data['age'] ?> 岁</p>\n</body>\n</html>\n\n请注意:我使用了短标签 <?= 和函数 htmlspecialchars()——这已经是对 XSS 的防护。学习 PHP 时的错误常常与忽视安全性有关。
错误 #2:忽视 SQL 注入(最危险的一种)
\n\n在 2025 年,写出这样的代码是一种犯罪:
\n\n$id = $_GET['id'];\n$query = "SELECT * FROM users WHERE id = $id";\n$result = mysqli_query($conn, $query);\n\n如果在 URL 中传入 ?id=1 OR 1=1,你会得到所有用户。如果传入 ?id=1; DROP TABLE users——数据库就没了。这就是 SQL 注入,这是黑客首先检查的东西。
如何修复?
\n使用预处理语句(prepared statements)。在现代 PHP 中使用 PDO 是这样做的:
\n\n$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');\n$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');\n$stmt->execute(['id' => $_GET['id']]);\n$user = $stmt->fetch();\n\n数据库会自动转义值。注入变得不可能。请记住:永远不要直接将用户数据拼接到 SQL 查询中。这是 学习 PHP 时的主要错误之一,可能会让你失去网站。
\n\n错误 #3:使用过时的函数和风格
\n\n网上有很多 2010 年的教程,教你使用:
\n- \n
mysql_connect()——已在 PHP 7.0 中移除。 \nereg()而不是preg_match()。 \nsplit()而不是explode()。 \n- 在纯 PHP 文件末尾关闭标签
?>。 \n
为什么这样不好?因为