mysqli_query()建库成功返回true但需配合mysqli_error()查具体错误;PDO::exec()建库成功返回0而非1,应设ERRMODE_EXCEPTION;mysqli_select_db()仅切换库不建库,建库后须显式选择或用库名前缀。

mysqli_query() 建库后怎么判断是否成功
直接看 mysqli_query() 的返回值:成功返回 true,失败返回 false。但仅靠这个不够,因为建库语句本身语法正确、权限不足或数据库已存在等情况都会导致失败,而错误细节藏在连接对象的错误属性里。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 必须配合
mysqli_error($conn)检查具体报错,比如Access denied或database exists - 不要只用
if (mysqli_query(...))就认为万事大吉,要主动捕获错误信息 - 建库语句推荐加
IF NOT EXISTS避免因“库已存在”报错,例如:CREATE DATABASE IF NOT EXISTS mydb
pdo::exec() 执行 CREATE DATABASE 后如何验结果
PDO::exec() 在建库成功时返回 0(注意:不是 1),失败则抛出 PDOException 或返回 false(取决于 PDO::ATTR_ERRMODE 设置)。这点和增删改操作完全不同,容易误判。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 确保
PDO::ATTR_ERRMODE设为PDO::ERRMODE_EXCEPTION,否则错误静默,很难调试 - 建库后可立刻执行
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mydb'来双重验证是否存在 - 避免依赖返回值是否为
1——CREATE DATABASE不影响行数,返回值恒为0
为什么 mysqli_select_db() 不能代替建库成功检测
mysqli_select_db() 是切换当前连接默认数据库,不是建库操作。它在库不存在时会失败,但即使建库成功,若没显式调用它或连接未重连,后续查询仍可能报 No database selected。
常见错误现象:
- 建库代码跑完没报错,但紧接着
mysqli_query($conn, 'CREATE TABLE...')报错:Unknown database - 误把
mysqli_select_db()的返回值当成建库结果,其实它只管“选”,不管“建” - 建库后没做
mysqli_select_db()或没在 SQL 中带库名前缀,导致表建到mysql系统库下(极少见但可能)
建库后立即创建表失败?检查这些点
建库返回 true 或 0 只代表语句执行完成,并不保证后续操作可用。真正卡住的地方往往在建库与建表之间的衔接。
关键检查项:
- 确认建库后是否调用
mysqli_select_db($conn, 'mydb')或在建表 SQL 中写全名:CREATE TABLE mydb.users (...) - MySQL 用户是否有对新库的
CREATE权限?仅CREATE DATABASE权限不够 - 建库和建表之间有没有并发冲突?比如多个请求同时建同名库,
IF NOT EXISTS能缓解但不解决权限/锁问题 - 某些托管环境(如 cPanel、阿里云 RDS)限制直接建库,需通过控制台或 API 创建,PHP 执行会始终失败











