You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用mysqli如何检测MySQL数据库是否存在,避免创建成功误提示

问题原因

CREATE DATABASE IF NOT EXISTS 语句执行时,只要语法合法、执行权限足够,哪怕目标数据库已经存在、没有实际执行创建操作,mysqli_query 也会返回布尔值true,只有执行出错(如权限不足、数据库名非法)时才会返回false,所以你原来的判断逻辑会无论是否真的创建了数据库,都触发创建成功的提示。

解决方法

你可以先主动查询MySQL的系统库判断目标数据库是否存在,再决定是否执行创建逻辑,修改后的代码如下:

<?php
// 连接MySQL服务
$mysql = @mysqli_connect("localhost", "test", "test");
if (!$mysql) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit();
}

$targetDb = 'myDB';
// 查询目标数据库是否存在
$checkQuery = "SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '" . mysqli_real_escape_string($mysql, $targetDb) . "'";
$checkResult = mysqli_query($mysql, $checkQuery);

if (mysqli_num_rows($checkResult) === 0) {
    // 数据库不存在,执行创建
    $createQuery = "CREATE DATABASE " . mysqli_real_escape_string($mysql, $targetDb);
    if (mysqli_query($mysql, $createQuery)) {
        echo "Database created successfully";
    } else {
        echo "Error creating database: " . mysqli_error($mysql);
    }
}
// 数据库已存在的情况不会进入上述分支,不会输出创建成功提示,如有需要可自行加else分支输出自定义提示

mysqli_close($mysql);
?>
补充说明
  • 代码里使用mysqli_real_escape_string对数据库名做转义,避免SQL注入风险,如果你固定使用硬编码的数据库名,也可以省略转义步骤
  • 如果你后续需要操作该数据库,也可以用@mysqli_select_db($mysql, $targetDb)的返回值判断库是否存在,该方法在库不存在时会返回false,适合需要紧接着连接库操作的场景

内容的提问来源于stack exchange,提问作者mateoo88

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 19:45:02