Appearance
12.1 连接数据库 mysqli_connect
mysqli 扩展介绍
mysqli(MySQL Improved)是 PHP 中用于与 MySQL 数据库交互的扩展,提供了更强大、更安全的数据库操作功能。
连接数据库的步骤
1. 准备连接参数
- 主机名:通常是
localhost - 用户名:MySQL 的用户名,如
root - 密码:MySQL 的密码
- 数据库名:要连接的数据库名称
- 端口:MySQL 服务的端口,默认是
3306
2. 使用 mysqli_connect 函数
php
<?php
// 连接参数
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test';
$port = 3306;
// 连接数据库
$conn = mysqli_connect($host, $user, $password, $dbname, $port);
// 检查连接是否成功
if (!$conn) {
die('数据库连接失败: ' . mysqli_connect_error());
}
echo '数据库连接成功!';
// 关闭连接
mysqli_close($conn);
?>3. 使用面向对象方式
php
<?php
// 连接参数
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test';
$port = 3306;
// 面向对象方式连接
$conn = new mysqli($host, $user, $password, $dbname, $port);
// 检查连接是否成功
if ($conn->connect_error) {
die('数据库连接失败: ' . $conn->connect_error);
}
echo '数据库连接成功!';
// 关闭连接
$conn->close();
?>连接配置
1. 字符集设置
为了避免乱码,应该在连接后设置字符集:
php
// procedural 风格
mysqli_set_charset($conn, 'utf8mb4');
// 面向对象风格
$conn->set_charset('utf8mb4');2. 错误处理
php
<?php
// 启用错误报告
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
try {
$conn = new mysqli('localhost', 'root', '', 'test');
$conn->set_charset('utf8mb4');
echo '数据库连接成功!';
} catch (mysqli_sql_exception $e) {
die('数据库连接失败: ' . $e->getMessage());
}
?>连接池
对于高并发应用,可以考虑使用连接池来提高性能:
php
<?php
class Database {
private static $instance = null;
private $conn;
private function __construct() {
$host = 'localhost';
$user = 'root';
$password = '';
$dbname = 'test';
$this->conn = new mysqli($host, $user, $password, $dbname);
$this->conn->set_charset('utf8mb4');
if ($this->conn->connect_error) {
die('数据库连接失败: ' . $this->conn->connect_error);
}
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function getConnection() {
return $this->conn;
}
public function __destruct() {
if ($this->conn) {
$this->conn->close();
}
}
}
// 使用示例
$db = Database::getInstance();
$conn = $db->getConnection();
echo '数据库连接成功!';
?>配置文件
为了方便管理,建议将数据库连接参数放在配置文件中:
config.php
php
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'test');
define('DB_PORT', 3306);
define('DB_CHARSET', 'utf8mb4');
?>db.php
php
<?php
require_once 'config.php';
function getDbConnection() {
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);
if ($conn->connect_error) {
die('数据库连接失败: ' . $conn->connect_error);
}
$conn->set_charset(DB_CHARSET);
return $conn;
}
// 使用示例
$conn = getDbConnection();
echo '数据库连接成功!';
$conn->close();
?>常见错误及解决方法
1. 连接被拒绝
错误信息:Connection refused
解决方法:
- 检查 MySQL 服务是否启动
- 检查主机名和端口是否正确
- 检查防火墙是否阻止连接
2. 访问被拒绝
错误信息:Access denied for user 'root'@'localhost'
解决方法:
- 检查用户名和密码是否正确
- 检查用户是否有访问权限
3. 数据库不存在
错误信息:Unknown database 'test'
解决方法:
- 检查数据库名称是否正确
- 确保数据库已经创建
4. 字符集问题
错误信息:乱码
解决方法:
- 设置正确的字符集,如
utf8mb4 - 确保数据库表使用相同的字符集
最佳实践
- 使用配置文件:将连接参数放在配置文件中,方便管理
- 错误处理:使用 try-catch 或错误检查处理连接错误
- 字符集设置:始终设置正确的字符集
- 关闭连接:操作完成后关闭数据库连接
- 使用预处理语句:防止 SQL 注入攻击
- 连接池:对于高并发应用,使用连接池提高性能
练习
- 创建一个数据库连接脚本,连接到 MySQL 数据库
- 处理连接错误,显示友好的错误信息
- 设置正确的字符集
- 关闭数据库连接
- 创建一个数据库连接类,实现单例模式
