PHP MySQL 创建数据库
在 PHP 中通过 mysqli
或 PDO
连接 MySQL 并创建数据库是一项常见任务。以下是使用 PHP 连接 MySQL 并创建数据库的中文讲解,包含 mysqli
和 PDO
的实现方式、代码示例和注意事项,简洁明了。
1. 前提条件
- MySQL 服务器:确保 MySQL 服务正在运行。
- PHP 扩展:确认启用了
mysqli
或pdo_mysql
扩展(PHP 默认包含)。 - 权限:连接的 MySQL 用户需要有
CREATE
权限以创建数据库。
2. 使用 mysqli
创建数据库
mysqli
提供面向对象和面向过程两种方式来执行 SQL 的 CREATE DATABASE
语句。
2.1 面向对象方式
<?php
$host = 'localhost';
$user = 'root';
$password = ''; // 根据实际情况设置密码
// 创建连接(未指定数据库)
$mysqli = new mysqli($host, $user, $password);
// 检查连接
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
// 创建数据库
$sql = "CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if ($mysqli->query($sql) === TRUE) {
echo "数据库 mydb 创建成功!";
} else {
echo "创建数据库失败: " . $mysqli->error;
}
// 关闭连接
$mysqli->close();
?>
2.2 面向过程方式
<?php
$host = 'localhost';
$user = 'root';
$password = '';
// 创建连接
$conn = mysqli_connect($host, $user, $password);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
// 创建数据库
$sql = "CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if (mysqli_query($conn, $sql)) {
echo "数据库 mydb 创建成功!";
} else {
echo "创建数据库失败: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>
3. 使用 PDO
创建数据库
PDO
通过执行 SQL 语句创建数据库,支持异常处理,适合现代化开发。
示例代码
<?php
$host = 'localhost';
$user = 'root';
$password = '';
try {
// 创建 PDO 连接(未指定数据库)
$pdo = new PDO("mysql:host=$host;charset=utf8mb4", $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 创建数据库
$sql = "CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$pdo->exec($sql);
echo "数据库 mydb 创建成功!";
} catch (PDOException $e) {
die("创建数据库失败: " . $e->getMessage());
}
// 关闭连接
$pdo = null;
?>
4. 关键点解析
CREATE DATABASE
语句:
- 语法:
CREATE DATABASE [IF NOT EXISTS] 数据库名 [CHARACTER SET 字符集] [COLLATE 排序规则];
IF NOT EXISTS
:防止数据库已存在时抛出错误。CHARACTER SET utf8mb4
:支持完整 Unicode 字符(如中文、表情符号)。COLLATE utf8mb4_unicode_ci
:不区分大小写的排序规则,适合多语言环境。
- 连接时不指定数据库:
- 创建数据库时,连接 MySQL 不需要指定具体数据库(
$database
或dbname
参数留空)。 - 创建成功后,可重新连接到新数据库进行后续操作。
- 权限要求:
- 确保 MySQL 用户(如
root
)有CREATE
权限。可通过以下 SQL 检查:sql SHOW GRANTS FOR 'user'@'host';
5. 创建数据库后创建表(示例)
创建数据库后,通常需要创建表。以下是连接到新数据库并创建表的示例。
mysqli 示例
<?php
$mysqli = new mysqli('localhost', 'root', '', 'mydb');
if ($mysqli->connect_error) {
die("连接失败: " . $mysqli->connect_error);
}
// 创建表
$sql = "CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
)";
if ($mysqli->query($sql) === TRUE) {
echo "表 users 创建成功!";
} else {
echo "创建表失败: " . $mysqli->error;
}
$mysqli->close();
?>
PDO 示例
<?php
try {
$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8mb4", 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 创建表
$sql = "CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL
)";
$pdo->exec($sql);
echo "表 users 创建成功!";
} catch (PDOException $e) {
die("创建表失败: " . $e->getMessage());
}
$pdo = null;
?>
6. 安全性和最佳实践
- 防止 SQL 注入:
- 创建数据库通常不涉及用户输入,但后续操作(如插入数据)应使用预处理语句。
- 字符集设置:
- 使用
utf8mb4
确保支持中文等 Unicode 字符,避免乱码。
- 错误处理:
mysqli
: 检查$mysqli->error
或mysqli_error()
。PDO
: 使用try-catch
捕获PDOException
。
- 权限管理:
- 使用最小权限用户(如非
root
),仅授予CREATE
和必要操作权限。 - 示例 SQL:
sql GRANT CREATE, SELECT, INSERT ON mydb.* TO 'user'@'localhost' IDENTIFIED BY 'password';
- 连接关闭:
- 操作完成后关闭连接(
mysqli::close()
或$pdo = null
),释放资源。
7. 注意事项
- 数据库名唯一性:
- 数据库名不能重复,建议使用
IF NOT EXISTS
避免错误。
- MySQL 版本:
- 确保 MySQL 支持
utf8mb4
(MySQL 5.5.3+)。
- 环境配置:
- 确认 PHP 启用了
mysqli
或pdo_mysql
扩展。 - 检查 MySQL 服务运行,主机、用户名、密码正确。
- 调试:
- 如果连接失败,检查 MySQL 日志或使用工具(如 phpMyAdmin)验证。
- 常见错误:权限不足、主机名错误、端口未开放(默认 3306)。
8. 总结
PHP 通过 mysqli
或 PDO
连接 MySQL 并创建数据库非常简单,只需执行 CREATE DATABASE
语句即可。mysqli
适合专注于 MySQL 的项目,PDO
更适合跨数据库或现代化开发。设置 utf8mb4
字符集、正确处理错误和关闭连接是关键。创建数据库后,可进一步创建表并执行 CRUD 操作。
如果需要更详细的示例(如创建复杂表结构)、调试帮助,或有其他问题,请告诉我!