mpyw / laravel-pdo-emulation-control
临时启用/禁用 PDO 预处理语句仿真
v2.0.5
2023-03-15 01:55 UTC
Requires
- php: ^8.0
- ext-pdo: *
- illuminate/database: ^9.0 || ^10.0 || ^11.0
- illuminate/support: ^9.0 || ^10.0 || ^11.0
- mpyw/unclosure: ^3.0
Requires (Dev)
- mockery/mockery: ^1.3.3 || ^1.4.2
- nunomaduro/larastan: >=1.0
- orchestra/testbench: *
- orchestra/testbench-core: >=7.0
- phpstan/extension-installer: >=1.1
- phpstan/phpstan: >=1.1
- phpunit/phpunit: >=9.5
README
临时启用/禁用 PDO 预处理语句仿真。
要求
安装
composer require mpyw/laravel-pdo-emulation-control
基本用法
重要
默认实现由 ConnectionServiceProvider
提供,但是,包发现不可用。请注意,您必须自己将其注册到 config/app.php
中。
<?php return [ /* ... */ 'providers' => [ /* ... */ Mpyw\LaravelPdoEmulationControl\ConnectionServiceProvider::class, /* ... */ ], ];
<?php use Illuminate\Support\Facades\DB; // Temporarily enable PDO prepared statement emulation. DB::emulated(function () { // Your code goes here }); // Temporarily disable PDO prepared statement emulation. // (Only if you've already configured your connection by options [PDO::ATTR_EMULATE_PREPARES => true]) DB::native(function () { // Your code goes here });
重要
请注意,即使这些方法直接接触 PDO
实例,DB::getPdo()
和 DB::getReadPdo()
也可能不会总是被调用。**连接尽可能延迟解决**。PDO::setAttribute()
仅在创建 PDO
实例并真正建立数据库的套接字连接后才会调用。
高级用法
提示
您可以通过自己使用 ControlsEmulation
特性来扩展连接类。
<?php namespace App\Providers; use App\Database\MySqlConnection; use Illuminate\Database\Connection; use Illuminate\Support\ServiceProvider; class DatabaseServiceProvider extends ServiceProvider { public function register(): void { Connection::resolverFor('mysql', function (...$parameters) { return new MySqlConnection(...$parameters); }); } }
<?php namespace App\Database; use Illuminate\Database\Connection as BaseMySqlConnection; use Mpyw\LaravelPdoEmulationControl\ControlsEmulation; class MySqlConnection extends BaseMySqlConnection { use ControlsEmulation; }