php创建数据库后能立即用吗_php建库后连接验证法【检验】
技术百科
雪夜
发布时间:2026-01-27
浏览: 次 PHP执行CREATE DATABASE后必须显式切换数据库,使用mysqli_select_db()或$mysqli->select_db(),不可依赖自动切换;USE语句虽可行但不推荐,因稳定性差且易导致状态不一致。
刚用 PHP 执行 CREATE DATABASE 语句后,不能直接用新库——因为当前连接仍绑定在原数据库(通常是 mysql 或未选库状态),必须显式切换。
PHP 建库后必须执行 mysqli_select_db() 或 mysqli::select_db()
MySQLi 连接对象默认不自动切换到刚创建的数据库。即使建库成功,后续 CREATE TABLE 等操作若没选库,会报错 No database selected。
- 使用面向对象风格:
$mysqli->select_db('new_db'),返回true表示成功 - 使用过程式风格:
mysqli_select_db($connection, 'new_db') - 注意:该函数不接受带反引号的库名,如
`my-db`会失败;应传纯名称my-db - 如果库名含特殊字符或短横线,确保已用合法标识符命名,且未在 SQL 中误加引号传入函数
用 mysqli_query() 发送 USE new_db 也能切换,但不推荐
虽然 mysqli_query($conn, "USE `new_db`") 在语法上可行,但它绕过了连接层的数据库上下文管理,容易和 select_db() 混用导致状态不一致,尤其在长连接或连接池场景下不可靠。
-
SELECT DATABASE()查询可验证当前所选库,建库后立即查,结果仍是NULL或旧库名 -
USE是 SQL 语句,受 SQL 模式(如sql_mode=STRICT_TRANS_TABLES)影响,而select_db()是 MySQLi 底层 C API 调用,更稳定 - PDO 用户同理:建库后需调用
$pdo->exec("USE new_db")或重建 PDO 实例指定dbname=new_db
建库 + 切库必须分两步,且需检查每步返回值
常见错误是只检查 CREATE DATABASE 是否成功,忽略 select_db() 可能失败(比如权限不足、库名拼写错误、字符集不兼容)。
-
CREATE DATABASE成功不代表你能访问它——用户可能只有CREATE权限,没有USAGE或SELECT - 建议顺序:
mysqli_query($conn, "CREATE DA→ 检查返回值 → 再调
TABASE IF NOT EXISTS testdb CHARACTER SET utf8mb4")
select_db()→ 再检查 - 字符集不匹配时(如建库用
utf8mb4,但连接默认latin1),后续建表可能报Invalid default value for 'xxx',应在建库后立刻mysqli_set_charset($conn, 'utf8mb4')
最易被忽略的是权限粒度:MySQL 的 CREATE DATABASE 权限不隐含对该库的任何操作权限,select_db() 成功只说明库存在且名字合法,不代表你能往里建表——那得看 CREATE 权限是否授予了这个具体库。
# 的是
# 也能
# 但不
# 但它
# 你能
# default
# 对象
# if
# 数据库
# 报错
# 仍是
# NULL
# select
# php
# 返回值
# for
# mysql
# sql
# 标识符
# pdo
# table
# mysqli
# 面向对象
# database
# 不代表
# 应在
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Windows 10怎么录屏_Windows 10
- Win11怎么设置任务栏透明_Windows11使
- Win10怎么卸载鲁大师_Win10彻底卸载鲁大师
- Windows10系统怎么查看显卡驱动_Win10
- Python列表推导式与字典推导式教程_简化代码高
- mac本地php环境如何开启curl_curl扩展
- 如何在Golang中使用replace替换模块_指
- Win10如何备份驱动程序_Win10驱动备份步骤
- Win11怎么关闭透明效果_Windows11辅助
- c++23 std::expected怎么用 c+
- Windows10怎么备份注册表_Windows1
- Python并发安全问题_资源竞争说明【指导】
- Win11怎么查看显卡温度 Win11任务管理器查
- LINUX的SELinux是什么_详解LINUX强
- 如何在 Go 结构体中正确初始化 map 字段
- Windows11怎么自定义任务栏_Windows
- 如何在包含多值的列中精准搜索指定演员?
- 如何在 Go 项目开发中正确处理本地包导入与远程模
- Windows10系统服务优化指南_Win10禁用
- Win11怎么关闭VBS安全性_Windows11
- Python对象比较排序规则_集合使用说明【指导】
- c++中如何求一个数的平方根_c++ sqrt函数
- php能控制zigbee模块吗_php通过串口与c
- Win10路由器怎么隐藏ssid Win10隐藏w
- PowerShell怎么创建复杂的XML结构
- 如何在 Go 中正确测试带 Cookie 的 HT
- Golang如何避免指针逃逸_Golang逃逸分析
- Win11怎么恢复误删照片_Win11数据恢复工具
- c# 如何深拷贝和浅拷贝
- Win10系统怎么查看显卡温度_Win10任务管理
- Win11怎么用设置清理回收站_Win11设置清理
- Win10如何更改任务栏高度_Windows10解
- c++中如何进行二进制文件读写_c++ read与
- 如何在Mac上搭建Golang开发环境_使用Hom
- 零基础学会Python自动化办公_高效处理Exce
- Windows怎样拦截QQ浏览器广告_Window
- Win11怎么设置默认输入法 Win11固定中文输
- Golang如何测试HTTP中间件_Golang
- c++ try_emplace用法_c++ map
- 微信JSAPI支付回调PHP怎么接收_处理JSAP
- Win11怎么制作U盘启动盘_Win11原版系统安
- Win10任务栏天气和资讯怎么关闭 Win10禁用
- Windows 11如何开启文件夹加密(EFS)_
- Windows10系统怎么查看CPU温度_Win1
- c++ unordered_map怎么用 c++哈
- MAC怎么设置程序窗口永远最前_MAC窗口置顶插件
- Python对象比较与排序_魔术方法解析【教程】
- windows如何禁用驱动程序强制签名_windo
- c++如何实现一个高性能的环形队列(Ring Bu
- 如何将文本文件中的竖排字符串转换为横排字符串


QQ客服