Skip to content

MySQL 创建数据库

像 MySQL 这样的关系型数据库(relational database)将数据组织到表中(tables)。在创建表和存储数据之前,通常需要先创建数据库本身。

注意:创建或删除数据库通常需要您的 MySQL 用户账户拥有特定的管理权限(例如 CREATE)。共享托管环境可能不允许通过脚本直接创建数据库;您通常需要使用他们的控制面板(例如 cPanel)。

使用 MySQLi 和 PDO 创建 MySQL 数据库

Section titled “使用 MySQLi 和 PDO 创建 MySQL 数据库”

SQL 命令 CREATE DATABASE database_name 用于在 MySQL 中创建一个新数据库。

PHP 提供了两个主要的扩展来与 MySQL 交互:MySQLi(Improved)和 PDO(PHP Data Objects)。两者都被积极维护,并且推荐替代旧的、已弃用的 mysql_* 函数。PDO 为不同的数据库系统提供了统一的接口(interface)。

不选择数据库进行连接:

要执行 CREATE DATABASE,您首先需要连接到 MySQL 服务器,而不在初始连接参数中指定特定的数据库。

使用 MySQLi(面向对象风格)的示例:

Section titled “使用 MySQLi(面向对象风格)的示例:”
<?php
// 数据库连接凭据(请替换为你的实际凭据)
$servername = "localhost";
$username = "your_username"; // 通常需要管理员/root 用户才能创建数据库
$password = "your_password";
$new_dbname = "myNewDB_mysqli";
// 创建到 MySQL 服务器的连接(初始时不指定数据库)
$conn = new mysqli($servername, $username, $password);
// 检查连接
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 创建数据库的 SQL
$sql = "CREATE DATABASE " . $new_dbname;
if ($conn->query($sql) === TRUE) {
echo "Database '" . htmlspecialchars($new_dbname) . "' created successfully";
} else {
echo "Error creating database: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
**注意:**仅连接以创建数据库时,请在 mysqli 构造函数中省略数据库名称参数。如果需要指定非默认端口(3306),可以将其作为第五个参数添加:new mysqli($servername, $username, $password, ”, $port);

使用 MySQLi(过程化风格)的示例:

Section titled “使用 MySQLi(过程化风格)的示例:”
<?php
// 数据库凭据
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$new_dbname = "myNewDB_procedural";
// 创建到 MySQL 服务器的连接
$conn = mysqli_connect($servername, $username, $password);
// 检查连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// 创建数据库的 SQL
$sql = "CREATE DATABASE " . $new_dbname;
if (mysqli_query($conn, $sql)) {
echo "Database '" . htmlspecialchars($new_dbname) . "' created successfully";
} else {
echo "Error creating database: " . mysqli_error($conn);
}
// 关闭连接
mysqli_close($conn);
?>

PDO 使用数据源名称(Data Source Name, DSN)进行连接。要创建数据库,连接时不需要在 DSN 中指定 dbname。

<?php
// 数据库凭据
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$new_dbname = "myNewDB_pdo";
try {
// 连接到 MySQL 服务器(DSN 中不含 dbname)
$conn = new PDO("mysql:host=$servername", $username, $password);
// 设置 PDO 错误模式为 exception,以便更好地处理错误
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 创建数据库的 SQL
$sql = "CREATE DATABASE " . $new_dbname;
// 使用 exec(),因为 CREATE DATABASE 不返回结果
$conn->exec($sql);
echo "Database '" . htmlspecialchars($new_dbname) . "' created successfully";
} catch(PDOException $e) {
// 捕获连接或执行期间的任何错误
die("Database creation failed: " . $e->getMessage());
}
// 关闭连接(在 PDO 中是可选的,脚本结束时会自动关闭)
$conn = null;
?>

使用 PDO 处理错误:

PDO 的一个显著优势是其强大的异常处理(exception handling)能力。通过将 PDO::ATTR_ERRMODE 设置为 PDO::ERRMODE_EXCEPTION,PDO 会针对数据库错误抛出异常(exceptions),这些异常可以在 try…catch 块中捕获。与在每次操作后手动检查错误相比,这能带来更清晰、更可预测的错误管理(error management)。

  • **MySQLi:**专用于 MySQL。提供面向对象(object-oriented)和过程化(procedural)接口。由于其直接的特性,对于仅使用 MySQL 的应用程序,性能可能略好。
  • **PDO:**数据库无关(Database-agnostic)(支持 MySQL、PostgreSQL、SQLite 等)。为不同数据库提供了统一的面向对象 API,使代码更具可移植性。通常更推荐用于旨在提高灵活性或可能支持多种数据库系统的新项目。