mysqli_select_db()用于在已成功建立的mysql连接上切换默认数据库,需传入连接句柄和数据库名两个参数,成功返回true、失败返回false,且必须确保连接已建立,否则报错。

mysqli_connect() 第 4 个参数传数据库名,或者用 mysqli->select_db() 切换——但必须先确保连接成功,否则会报错。
mysqli_connect() 连接时直接指定数据库名
这是最简路径,适合单库应用。参数顺序固定:mysqli_connect($host, $user, $pass, $dbname),第 4 个参数 $dbname 是可选的,填了就自动选库,不填就只连服务端,没默认库。
常见错误现象:No database selected —— 就是因为漏传第 4 个参数,又没手动选库,执行 SELECT 时直接报错。
- 面向过程写法:
$conn = mysqli_connect("localhost", "root", "pass", "myapp_db"); - 面向对象写法:
$mysqli = new mysqli("localhost", "root", "pass", "myapp_db"); - 如果连接失败,
$conn或$mysqli是false或未初始化对象,后续调用任何方法(如query())都会出错,务必先检查:if (!$conn) die("连接失败: " . mysqli_connect_error());
连接后用 mysqli_select_db() 切换数据库
适用于需要在运行时动态切换库的场景,比如多租户或迁移脚本。注意:这个函数必须传两个参数——连接句柄 + 数据库名,缺一不可。
常见错误写法:mysqli_select_db("myapp_db") —— 缺少连接资源,PHP 会警告“expects exactly 2 parameters”。
- 面向过程:
mysqli_select_db($conn, "myapp_db"),其中$conn必须是有效的mysqli资源 - 面向对象:
$mysqli->select_db("myapp_db"),前提是$mysqli已成功实例化且未断开 - 切换失败时不会抛异常,但后续查询会报
No database selected或Unknown database,建议配合mysqli_error($conn)检查
字符集设置不能省,尤其 utf8mb4
即使连接和选库都成功,中文乱码、emoji 存储失败,大概率是字符集没设对。MySQLi 默认用 latin1,PHP 和 MySQL 两端不一致就会出问题。
- 推荐在连接后立即执行:
mysqli_set_charset($conn, "utf8mb4")(过程式)或$mysqli->set_charset("utf8mb4")(对象式) - 不要用
mysqli_query($conn, "SET NAMES utf8"),它只影响当前连接会话,且utf8在 MySQL 中实际是utf8mb3,不支持 4 字节 emoji - DSN 或配置里不写
charset=utf8mb4对 mysqli 没用,那是 PDO 的语法
PHP 7.2 环境下必须避开的坑
PHP 7.2 已彻底移除 mysql_* 函数,任何残留调用(如 mysql_connect()、mysql_select_db())会直接触发 Fatal error: Uncaught Error: Call to undefined function mysql_connect()。
- 确认 php.ini 中已启用
extension=mysqli(不是mysql),可通过php -m | grep mysqli验证 -
mysqli_connect()返回false时,mysqli_connect_error()才有内容;若用对象式,$mysqli->connect_error是属性,不是函数 - 不要依赖
mysqli.default_db这类 ini 设置——它已被废弃,且不生效
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











