PHP开发里经常用到的那些MySQL语句,写代码时总会碰上的各种查询和操作
- 问答
- 2026-01-02 04:55:20
- 3
在PHP开发中,和MySQL数据库打交道是家常便饭,以下这些SQL语句,几乎在每个项目中都会反复出现,为了方便理解,我们假设有一个名为users的用户表,它包含id、username、email和created_at等字段;还有一个名为articles的文章表,包含id、title、content、user_id(作者ID)和published_at等字段。
插入数据(INSERT INTO)
当用户注册时,我们需要将他的信息存入数据库,这时就用到了INSERT语句。
例子:INSERT INTO users (username, email, created_at) VALUES ('张三', 'zhangsan@example.com', NOW())
这句SQL的意思是:向users表中的username、email和created_at字段插入对应的值。NOW()是MySQL的函数,能自动获取当前时间,在PHP中,我们通常会使用预处理语句来安全地执行这个操作,防止SQL注入攻击。
查询数据(SELECT ... FROM ...) 这是使用频率最高的语句,用于从表中获取数据。
- 查询所有数据:
SELECT * FROM users,这会获取users表里的所有记录的所有字段,星号代表所有字段,但在实际项目中,为了性能,建议明确写出需要的字段名,比如SELECT id, username FROM users。 - 带条件的查询(WHERE):几乎所有的查询都不会是获取全部数据,而是有特定条件的。
- 根据ID查询用户:
SELECT * FROM users WHERE id = 1 - 根据用户名和邮箱查询(AND):
SELECT * FROM users WHERE username = '李四' AND email = 'lisi@example.com' - 模糊查询(LIKE):搜索用户名中包含“张”的用户:
SELECT * FROM users WHERE username LIKE '%张%',百分号是通配符,代表任意字符。
- 根据ID查询用户:
- 限制查询条数(LIMIT):在分页或者只需要获取前几条记录时非常有用,获取最新的10篇文章:
SELECT * FROM articles ORDER BY published_at DESC LIMIT 10。ORDER BY published_at DESC表示按发布时间降序排列,即最新的排在前面。
更新数据(UPDATE ... SET ... WHERE)
当用户修改自己的个人信息时,就需要用到UPDATE语句。
例子:UPDATE users SET email = 'new_email@example.com' WHERE id = 5
这句SQL将id为5的用户的邮箱更新为新邮箱。这里要极其小心,WHERE条件绝对不能省略,否则会将表中所有用户的邮箱都更新掉,造成严重事故。
删除数据(DELETE FROM ... WHERE)
当需要删除一条记录时使用。
例子:DELETE FROM articles WHERE id = 15
这句SQL会删除id为15的文章,和UPDATE一样,WHERE条件至关重要,没有条件会清空整个表。
表连接查询(JOIN)
这是关系型数据库的核心操作之一,当我们需要的信息分布在多个表时,就需要连接。
我们要显示文章列表,并同时显示每篇文章的作者名,文章存在articles表,作者名存在users表,它们通过articles.user_id和users.id关联。
SELECT articles.title, articles.published_at, users.username FROM articles INNER JOIN users ON articles.user_id = users.id ORDER BY articles.published_at DESC
这里使用了INNER JOIN(内连接),意思是只选择那些在articles表中有user_id并且在users表中能找到对应id的记录,这是一种非常常见的“一对多”关系查询。
统计数量(COUNT)
用于计算满足条件的记录有多少条,常用于分页计算总页数,或者统计数量。
例子:统计用户总数:SELECT COUNT(*) AS total_users FROM users
统计某个分类下的文章数:SELECT COUNT(*) FROM articles WHERE user_id = 3。AS total_users是给统计结果起一个别名,在PHP中可以通过这个别名来获取值。
排序(ORDER BY) 让查询结果按某个字段排序。
- 升序(默认,ASC):
SELECT * FROM users ORDER BY created_at ASC(按注册时间从早到晚排序) - 降序(DESC):
SELECT * FROM articles ORDER BY published_at DESC(按发布时间从新到旧排序)
数据分组(GROUP BY)
通常与COUNT、SUM、AVG等聚合函数一起使用,我们想统计每个用户发表了多少篇文章:
SELECT user_id, COUNT(*) AS article_count FROM articles GROUP BY user_id
这句SQL会先按user_id将文章分组,同一個user_id的文章被分到一组,然后计算每组的文章数量。
在PHP中如何使用这些语句:
通常的步骤是:连接数据库 -> 准备SQL语句 -> 执行查询 -> 处理结果 -> 关闭连接。
对于INSERT、UPDATE、DELETE这种不返回数据行的操作,使用mysqli_query或PDO的exec方法,然后检查影响的行数。
对于SELECT这种返回数据集的查询,执行后需要使用循环(如while循环)来遍历结果集(mysqli_fetch_assoc或PDO的fetch方法),将每行数据转换为数组供PHP使用。
特别重要的安全提醒:
在PHP中拼接SQL语句时,绝对不能直接将用户输入的数据(如$_POST、$_GET)拼接到SQL字符串中,这会导致致命的SQL注入漏洞,必须使用预处理语句(Prepared Statements),这是防止SQL注入的唯一正确方式,无论是MySQLi还是PDO扩展都支持预处理。
这些操作构成了PHP与MySQL交互的基础,几乎所有的业务逻辑,如用户注册登录、新闻列表展示、数据管理后台,都是通过这些基本语句的组合来实现的。

本文由凤伟才于2026-01-02发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:http://waw.haoid.cn/wenda/72878.html
