上一篇
连接数据库后执行SQL查询语句,通过结果集对象遍历获取返回数据,查询结果通常以行和列形式组织,需逐行提取所需字段值,不同编程语言提供特定API(如JDBC、ODBC、PDO)操作结果集。
基础流程(通用4步)
-
建立连接
使用数据库驱动连接(需账号/密码/库名)# Python示例(MySQL) import mysql.connector db = mysql.connector.connect( host="localhost", user="root", password="", database="mydb" )
-
执行查询
通过游标(Cursor)发送SQL指令// PHP示例(PDO) $stmt = $pdo->prepare("SELECT name, email FROM users WHERE id = :id"); $stmt->execute(['id' => 1001]); -
获取结果
根据语言特性选择提取方式:- 单条数据:
fetch()(PHP/PDO)、fetchone()(Python) - 多条数据:
fetchAll()(PHP)、fetchall()(Python) - 分页获取:
LIMIT offset, count(SQL语句控制)
// Node.js示例(MySQL模块) connection.query("SELECT * FROM products", (err, results) => { if (err) throw err; console.log(results); // 结果以数组形式返回 }); - 单条数据:
-
关闭资源
释放连接避免内存泄漏// Java示例(JDBC) resultSet.close(); statement.close(); conn.close();
不同语言具体实现
| 语言 | 关键代码片段 | 结果类型 |
|---|---|---|
| Python | cursor.fetchone() |
元组或字典 |
| PHP | $stmt->fetch(PDO::FETCH_ASSOC) |
关联数组 |
| Java | resultSet.getString("column_name") |
按列名提取 |
| Node.js | rows[0].username |
对象数组 |
示例:Python读取用户表
cursor = db.cursor() cursor.execute("SELECT * FROM users WHERE status=1") active_users = cursor.fetchall() # 返回列表:[ (1, 'John', ...), ... ]
安全注意事项
-
防SQL注入
错误方式:直接拼接字符串("SELECT * FROM users WHERE id=" + userInput)
正确方式:使用参数化查询:// PHP安全示例 $stmt = $pdo->prepare("SELECT * FROM posts WHERE category = ?"); $stmt->bindParam(1, $userCategory); // 自动过滤危险字符 -
错误处理
添加异常捕获避免信息泄露:try { ResultSet rs = stmt.executeQuery(sql); } catch (SQLException e) { System.out.println("查询失败"); // 生产环境应记录日志而非输出错误详情 }
常见问题解决
-
问题1:返回空结果?
检查SQL语句:用命令行工具(如MySQL Workbench)直接测试查询
确认连接库名/表名拼写正确 -
问题2:乱码或编码错误?
连接后立即设置字符集(推荐UTF-8):db.set_charset("utf8mb4") # Python-- SQL语句指定 SELECT CONVERT(column_name USING utf8) FROM table
-
问题3:性能慢?
- 用
EXPLAIN分析SQL执行计划 - 只查询必要字段(避免
SELECT *) - 对
WHERE条件列添加索引
- 用
最佳实践
- 使用ORM工具(如SQLAlchemy、Sequelize)简化操作
- 敏感数据脱敏:查询密码时用
SELECT MD5(password) - 资源释放:在
finally块中关闭连接 - 结果验证:
if ($result->rowCount() > 0) { // 存在数据再操作 } else { echo "无匹配记录"; }
关键点:始终优先考虑安全性而非便捷性,参数化查询是底线,测试时先用模拟数据验证逻辑,再对接真实数据库。
引用说明
本文方法基于官方文档:
- PHP PDO手册
- Python DB-API标准
- MySQL Connector/J
- OWASP SQL注入防护指南(2025版)
