以下是一个完整的PHP示例,它会检查数据库是否存在,然后根据情况创建数据库并给出明确的提示信息:
<?php
// 数据库连接配置
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "aasql"; // 要检查/创建的数据库名
try {
// 创建连接(不指定数据库名)
$conn = new PDO("mysql:host=$servername", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 检查数据库是否存在
$stmt = $conn->query("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '$dbname'");
$databaseExists = $stmt->fetchColumn();
if ($databaseExists) {
echo "数据库 '$dbname' 已存在,无需创建。";
} else {
// 创建数据库
$conn->exec("CREATE DATABASE `$dbname`");
echo "数据库 '$dbname' 创建成功!";
// 可选:设置字符集
// $conn->exec("CREATE DATABASE `$dbname` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
}
} catch(PDOException $e) {
echo "操作失败: " . $e->getMessage();
} finally {
// 关闭连接
$conn = null;
}
?>
代码说明
连接数据库:使用PDO连接到MySQL服务器(不指定具体数据库)
检查数据库存在:
查询information_schema.SCHEMATA系统表
使用fetchColumn()检查是否存在指定数据库
创建数据库:
如果不存在则创建
使用反引号包裹数据库名以避免关键字冲突
错误处理:
使用try-catch捕获可能的异常
提供明确的错误信息
输出提示:
数据库已存在时给出提示
新建成功时给出成功消息
安全增强版
为了防止SQL注入,可以使用参数化查询:
// 检查数据库存在(参数化查询)
$stmt = $conn->prepare("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?");
$stmt->execute([$dbname]);
$databaseExists = $stmt->fetchColumn();
完整功能扩展版
<?php
function createDatabaseIfNotExists($servername, $username, $password, $dbname, $charset = 'utf8mb4', $collation = 'utf8mb4_unicode_ci') {
try {
$conn = new PDO("mysql:host=$servername", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = ?");
$stmt->execute([$dbname]);
if ($stmt->fetchColumn()) {
return ["status" => "exists", "message" => "数据库 '$dbname' 已存在"];
} else {
$sql = "CREATE DATABASE `$dbname` CHARACTER SET $charset COLLATE $collation";
$conn->exec($sql);
return ["status" => "created", "message" => "数据库 '$dbname' 创建成功"];
}
} catch(PDOException $e) {
return ["status" => "error", "message" => "操作失败: " . $e->getMessage()];
} finally {
$conn = null;
}
}
// 使用示例
$result = createDatabaseIfNotExists("localhost", "root", "password", "aasql");
echo $result['message'];
?>
这个解决方案提供了清晰的提示信息,安全地检查数据库是否存在,并根据情况创建数据库。您可以根据实际需求调整字符集和排序规则等参数。
评论