PHP MySQL 创建数据库
在开始使用MySQL数据库之前,我们需要先创建一个数据库。本教程将介绍如何使用PHP创建MySQL数据库,包括MySQLi扩展和PDO(PHP数据对象)两种方式。
前提条件
要创建MySQL数据库,您需要:
- MySQL服务器已安装并运行
- 具有创建数据库权限的MySQL用户账号
- PHP环境中已启用MySQLi或PDO扩展
使用MySQLi创建数据库
MySQLi扩展提供了面向对象和过程式两种方式来创建数据库。
1. 面向对象方式
<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";
// 创建连接
$conn = new mysqli($servername, $username, $password);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 创建数据库
$sql = "CREATE DATABASE myDB";
if ($conn->query($sql) === true) {
echo "数据库创建成功";
} else {
echo "创建数据库错误: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
2. 过程式方式
<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检查连接
if (!$conn) {
die("连接失败: " . mysqli_connect_error());
}
// 创建数据库
$sql = "CREATE DATABASE myDB";
if (mysqli_query($conn, $sql)) {
echo "数据库创建成功";
} else {
echo "创建数据库错误: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>
使用PDO创建数据库
PDO(PHP数据对象)也提供了创建数据库的功能。
<?php
// 数据库连接参数
$servername = "localhost";
$username = "username";
$password = "password";
// 尝试连接数据库服务器
try {
$conn = new PDO("mysql:host=$servername;", $username, $password);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 创建数据库
$sql = "CREATE DATABASE myDB";
$conn->exec($sql);
echo "数据库创建成功";
} catch(PDOException $e) {
echo "创建数据库错误: " . $e->getMessage();
}
// 关闭连接
$conn = null;
?>
指定字符集创建数据库
创建数据库时,可以指定数据库使用的字符集和排序规则,这对于支持中文等非ASCII字符非常重要。
MySQLi方式
<?php
// 创建带字符集的数据库
$sql = "CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if ($conn->query($sql) === true) {
echo "带字符集的数据库创建成功";
} else {
echo "创建数据库错误: " . $conn->error;
}
?>
PDO方式
<?php
// 创建带字符集的数据库
$sql = "CREATE DATABASE myDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$conn->exec($sql);
echo "带字符集的数据库创建成功";
?>
检查数据库是否存在
在创建数据库之前,通常需要检查该数据库是否已经存在,以避免出现错误。
MySQLi方式
<?php
// 检查数据库是否存在
$dbname = "myDB";
// 查询所有数据库
$sql = "SHOW DATABASES LIKE '$dbname;
$result = $conn->query($sql);
if ($result->num_rows == 0) {
// 数据库不存在,创建数据库
$sql = "CREATE DATABASE $dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
if ($conn->query($sql) === true) {
echo "数据库创建成功";
} else {
echo "创建数据库错误: " . $conn->error;
}
} else {
echo "数据库已经存在";
}
?>
PDO方式
<?php
// 检查数据库是否存在
$dbname = "myDB";
try {
// 尝试连接到指定数据库
$testConn = new PDO("mysql:host=$servername;dbname=$dbname;", $username, $password);
echo "数据库已经存在";
$testConn = null;
} catch(PDOException $e) {
// 数据库不存在,创建数据库
$sql = "CREATE DATABASE $dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci";
$conn->exec($sql);
echo "数据库创建成功";
}
?>
常见的字符集和排序规则
字符集 | 排序规则 | 描述 |
---|---|---|
utf8mb4 | utf8mb4_unicode_ci | 推荐使用,支持所有Unicode字符,包括emoji表情 |
utf8mb4 | utf8mb4_general_ci | 性能更好,但排序准确性稍差 |
utf8 | utf8_unicode_ci | 较早的UTF-8实现,不支持所有Unicode字符 |
latin1 | latin1_swedish_ci | 默认字符集,仅支持基本拉丁字符 |
MySQL数据库命名规则
- 数据库名可以包含字母、数字、下划线(_)
- 数据库名不能以数字开头
- 数据库名不能包含空格或特殊字符(如!@#$%^&*等)
- 数据库名最长为64个字符
- 不区分大小写,但建议保持一致
- 避免使用MySQL保留字作为数据库名
MySQL保留字
创建数据库时,应避免使用以下MySQL保留字作为数据库名:
SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, TABLE,
DATABASE, INDEX, VIEW, JOIN, WHERE, ORDER, BY, GROUP, HAVING,
AND, OR, NOT, IN, BETWEEN, LIKE, AS, ON, FROM, TO, VALUES,
SET, NULL, TRUE, FALSE, PRIMARY, KEY, FOREIGN, REFERENCES,
UNIQUE, DEFAULT, AUTO_INCREMENT, LIMIT, OFFSET, ASC, DESC
最佳实践
- 创建数据库时指定字符集和排序规则,推荐使用utf8mb4和utf8mb4_unicode_ci
- 在创建数据库前检查是否已存在
- 使用有意义且符合命名规范的数据库名
- 避免使用MySQL保留字作为数据库名
- 为不同的项目创建独立的数据库
- 定期备份数据库
- 限制数据库用户的权限,遵循最小权限原则