上一篇
html用php链接数据库
- 行业动态
- 2025-04-29
- 3517
使用PHP的MySQLi或PDO扩展,通过$conn=new mysqli(…)建立数据库连接,配合HTML表单提交数据后,用$stmt->prepare()执行带参数
环境准备
使用PHP连接数据库需要以下环境支持:
- Web服务器:如Apache、Nginx
- PHP环境:建议PHP 7.0+版本
- 数据库服务器:如MySQL、MariaDB
- 数据库驱动:PHP扩展(如
mysqli
或PDO
)
数据库连接步骤
创建数据库和表
-创建数据库 CREATE DATABASE test_db; -使用数据库 USE test_db; -创建表 CREATE TABLE users ( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL );
PHP连接数据库(使用mysqli扩展)
<?php // 数据库配置信息 $host = 'localhost'; // 数据库服务器地址 $username = 'root'; // 数据库用户名 $password = '123456'; // 数据库密码 $dbname = 'test_db'; // 数据库名称 $port = 3306; // 端口号(默认3306) // 创建连接 $conn = new mysqli($host, $username, $password, $dbname, $port); // 检查连接是否成功 if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } echo "连接成功!"; ?>
执行SQL查询
查询数据(SELECT)
<?php // 连接数据库(省略重复代码) $conn = new mysqli($host, $username, $password, $dbname, $port); // 执行SQL查询 $sql = "SELECT FROM users"; $result = $conn->query($sql); // 处理结果集 if ($result->num_rows > 0) { while ($row = $result->fetch_assoc()) { echo "ID: " . $row["id"] . " 用户名: " . $row["username"] . "<br>"; } } else { echo "暂无数据"; } $conn->close(); ?>
关闭数据库连接
<?php // 关闭连接 $conn->close(); ?>
安全实践:防止SQL注入
使用预处理语句(Prepared Statements)
<?php // 连接数据库(省略重复代码) $conn = new mysqli($host, $username, $password, $dbname, $port); // 预处理SQL语句 $stmt = $conn->prepare("SELECT FROM users WHERE id = ?"); $stmt->bind_param("i", $userId); // 绑定参数类型(i: 整数) // 设置参数值 $userId = 1; $stmt->execute(); // 获取结果 $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo "用户名: " . $row["username"]; } // 释放资源 $stmt->close(); $conn->close(); ?>
常用函数与方法对比表
功能 | mysqli扩展 | PDO扩展 |
---|---|---|
创建连接 | new mysqli() | new PDO() |
执行查询 | $conn->query() | $conn->query() |
预处理语句 | $conn->prepare() | $conn->prepare() |
绑定参数 | bind_param() | 命名占位符(如:id ) |
错误处理 | $conn->error | PDO::ERRMODE_EXCEPTION |
相关问题与解答
问题1:如何选择mysqli
和PDO
?
解答:
mysqli
:专为MySQL设计,性能较高,适合单一MySQL数据库项目。PDO
:支持多种数据库(如PostgreSQL、SQLite),提供统一接口,适合需要跨数据库的项目。
建议:若项目仅用MySQL,优先mysqli
;若需兼容多数据库,选PDO
。
问题2:为什么使用预处理语句能防止SQL注入?
解答:
预处理语句将SQL逻辑与参数分离,参数值通过绑定传递,而非直接拼接到SQL语句中,攻击者无法通过参数改动SQL结构(如' OR 1=1
),从而有效防止