Looking to hire Laravel developers? Try LaraJobs

laravel-pdo-emulation-control maintained by mpyw

Description
Temporarily enable/disable PDO prepared statement emulation
Author
Last update
2025/12/14 19:57 (dev-master)
License
Links
Downloads
80 249

Comments
comments powered by Disqus

Laravel PDO Emulation ControlBuild Status Coverage Status

Temporarily enable/disable PDO prepared statement emulation.

Requirements

Package Version Mandatory
PHP ^8.2
Laravel ^11.0 || ^12.0
PHPStan >=2.0

[!NOTE] Older versions have outdated dependency requirements. If you cannot prepare the latest environment, please refer to past releases.

Installing

composer require mpyw/laravel-pdo-emulation-control

Basic Usage

[!IMPORTANT] The default implementation is provided by ConnectionServiceProvider, however, package discovery is not available. Be careful that you MUST register it in config/app.php by yourself.

<?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    
});

[!IMPORTANT] Note that DB::getPdo() DB::getReadPdo() are not always called even though these methods directly touch the PDO instances. Connections are lazily resolved as possible as they can. PDO::setAttribute() is called only after the PDO instance has been created and the socket connection to the database has been really established.

Advanced Usage

[!TIP] You can extend Connection classes with ControlsEmulation trait by yourself.

<?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;
}