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
相关产品推荐
相关产品推荐

