【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客
7.1 PHP连接数据库
PHP支持的数据库类型非常广泛,包括MySQL、Oracle、SQL Server、MongoDB、Redis、PostgreSQL、SQLite等。以连接MySQL数据库为例,通常使用mysqli扩展或PDO(PHP Data Objects)扩展,这两个扩展需要在PHP安装目录下的php.ini中进行配置。首先打开php.ini,找到“;extension=php_mysqli”和“;extension=pdo_mysql”语句,去掉这两条语句前的分号“;”,再保存一下php.ini文件,重新启动开发服务器即可启用mysqli和PDO。
下面是PHP通过mysqli扩展连接数据库的示例,需要读者事先安装好MySQL 8数据库:
//public/testmysqli.php
<?php
//连接数据库,world是MySQL自带的示例数据库,在安装MySQL时需要选择安装
$db=mysqli_connect('localhost','root','1111','world') or die("无法连接服务器");
print("成功连接服务器<br>");
$sq = "select * from city limit 10";
$result = mysqli_query($db,$sq);
while($row = mysqli_fetch_row($result)){
print($row[1]."<br>");
}
mysqli_close($db);
运行服务器,在浏览器中访问http://localhost:8000/testmysqli.php,看到正确的输出结果,即表示mysqli扩展正常工作。再来看一个PHP通过PDO扩展连接数据库的示例:
//public/testpdo.php
<?php
try {
//连接数据库,world是MySQL自带的示例数据库,在安装MySQL时需要选择安装
$dbconnect = new PDO('mysql:host=localhost;dbname=world','root','1111');
} catch (PDOException $exception) {
echo "Connection error message: " . $exception->getMessage();
}
$sqlquery = "select * from city limit 10";
$result = $dbconnect->query($sqlquery);
foreach ($result as $row){
$name = $row['Name'];
$countrycode = $row['CountryCode'];
echo "City: $name . $CountryCode. <br/>";
}
运行服务器,在浏览器中访问http://localhost:8000/testpdo.php,看到正确的输出结果,即表示PDO扩展已经正常工作了。
7.2 ThinkPHP连接数据库
ThinkPHP 8的数据库连接的配置跟之前的版本区别不大,在config/database.php中配置好连接信息,然后就可以编写控制器并执行查询了。
ThinkPHP 8支持多个数据库连接,默认情况下会使用默认的数据库进行连接,我们也可以通过代码指定想要采用的连接方式,这个功能使用起来非常灵活。
7.2.1 单个数据库连接
下面是一个连接数据库的配置示例:
// config/database.php
'default' => env('DB_DRIVER', 'mysql'),
// 数据库连接配置信息
'connections' => [
'mysql' => [ // 连接标识符
// 数据库类型
'type' => env('DB_TYPE', 'mysql'),
// 服务器地址
'hostname' => env('DB_HOST', '127.0.0.1'),
// 数据库名
'database' => env('DB_NAME', 'test'),
// 用户名
'username' => env('DB_USER', 'root'),
// 密码
'password' => env('DB_PASS', '111111'),
// 端口
'hostport' => env('DB_PORT', '3306'),
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => env('DB_CHARSET', 'utf8'),
// 数据库表前缀
'prefix' => env('DB_PREFIX', ''),
],
// 更多的数据库配置信息
]
下面列举一个在控制器中查询数据库版本的示例。
【示例7-1】
新建app/controller/Index.php文件,代码如下:
<?php
// 控制器
namespace app\controller;
use think\facade\Db;
class Index
{
// 获取数据库版本号
public function index()
{
print_r(Db::query('SELECT VERSION()'));
}
}
运行服务器,在浏览器中访问http://localhost:8000,输出结果如下,笔者的数据库版本是8.3.0,读者的输出有可能与此结果信息不一致,这个是正常的。
Array ( [0] => Array ( [VERSION()] => 8.3.0 ) )