推荐使用mysqli或PDO连接MySQL;mysqli可在连接时第4参数指定库名,或用mysqli_select_db()切换;PDO通过DSN一步指定dbname更安全,且需加charset=utf8mb4防乱码。
PHP 7.0+ 已废弃 mysql_* 系列函数(如 mysql_connect、mysql_select_db),直接调用会报 Fatal error: Uncaught Error: Call to undefined function mysql_connect()。现在唯一推荐的方式是使用 mysqli 或 PDO。
最简选库路径有两种:
mysqli_connect($host, $user, $pass, $dbname)
mysqli_select_db($connection, $dbname) 切换注意:第 4 个参数是可选的,不填就只连 MySQL 服务,没默认库;此时若执行 SELECT * FROM user 会报错 No database selected。
常见错误写法:mysqli_select_db("myapp_db") —— 缺少连接句柄,会警告 mysqli_select_db() expects exactly 2 parameters。
正确做法:
$mysqli = new mysqli($host, $user, $pass); $mysqli->select_db("myapp_db");
$conn = mysqli_connect($host, $user, $pass); mysqli_select_db($conn, "myapp_db");
如果连接失败,$conn 是 false,后续调用 mysqli_select_db(false, "xxx") 会触发警告。务必先检查连接是否成功。
比起 mysqli 分两步(连 + 选),PDO 在构造时就把数据库名嵌进 DSN 里,天然避免漏选库问题:
$dsn = "mysql:host=localhost;dbname=myapp_db;charset=utf8mb4";
$pdo = new PDO($dsn, $user, $pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
]);关键点:
dbname=xxx 是 DSN 的一部分,不是额外参数charset=utf8mb4 建议加上,避免中文乱码和 emoji 存储异常dbname 也能连上 MySQL 服务,但后续所有查询都得带 database.table 全限定名,比如 SELECT * FROM myapp_db.users
调试时容易混淆这两个函数:
mysqli_connect_error() 只在 mysqli_connect() 失败后有效,例如账号密码错、端口不通mysqli_error($conn) 是针对已建立连接后的操作失败,比如 mysqli_select_db($conn, "nonexistent") 报错时才用它典型调试片段:
$conn = mysqli_connect($host, $user, $pass);
if (!$conn) {
die("连接失败:" . mysqli_connect_error()); // ← 这里用 mysqli_connect_error()
}
if (!mysqli_select_db($conn, "
myapp_db")) {
die("选库失败:" . mysqli_error($conn)); // ← 这里用 mysqli_error($conn)
}漏掉这个区分,可能拿到空字符串或上一次错误残留,导致定位困难。