reactphp-x/mysql-pool

There is no license information available for the latest version (v1.0.0) of this package.

v1.0.0 2024-08-10 01:11 UTC

This package is auto-updated.

Last update: 2024-12-12 07:03:09 UTC


README

    +----------------+
    |   connect pool --------------------------> mysql server
    |       |        |
    |       |        |
    |       |        |
    |       app      |
    +----------------+

install

composer require reactphp-x/mysql-pool -vvv

Usage

<?php

require_once './vendor/autoload.php';

use ReactphpX\MySQL\Pool;
use React\MySQL\QueryResult;
use React\EventLoop\Loop;

$pool = new Pool('username:password@host/databasename?timeout=5', [
    'min_connections' => 2, // min 2 connection
    'max_connections' => 10, // max 10 connection
    'max_wait_queue' => 110, // how many sql in queue
    'wait_timeout' => 5,// wait time include response time
    'keep_alive' => 60, // 
]);

qeury($pool);
queryStream($pool);

function qeury($pool) {
    for ($i=0; $i < 90; $i++) { 
        $pool->query('select * from blog')->then(function (QueryResult $command) use ($i) {
            echo "query:$i\n";
            if (isset($command->resultRows)) {
                // this is a response to a SELECT etc. with some rows (0+)
                // print_r($command->resultFields);
                // print_r($command->resultRows);
                echo count($command->resultRows) . ' row(s) in set' . PHP_EOL;
            } else {
                // this is an OK message in response to an UPDATE etc.
                if ($command->insertId !== 0) {
                    var_dump('last insert ID', $command->insertId);
                }
                echo 'Query OK, ' . $command->affectedRows . ' row(s) affected' . PHP_EOL;
            }
        }, function (\Exception $error) {
            // the query was not executed successfully
            echo 'Error: ' . $error->getMessage() . PHP_EOL;
        });
        
    }
}

function queryStream($pool){
    for ($i=0; $i < 90; $i++) { 
        (function($pool,$i){
            $stream = $pool->queryStream('select * from blog');
           
            $stream->on('data', function ($data) use ($i) {
                // echo "queryStream:$i\n";
                // print_r($data);
            });
            $stream->on('error', function ($err) {
                echo 'Error: ' . $err->getMessage() . PHP_EOL;
            });
            $stream->on('end', function () use ($i) {
                echo 'Completed.'.$i . PHP_EOL;
            });
            
           
        })($pool, $i);
        
    }
}


Loop::addPeriodicTimer(5, function() use ($pool) {
    // qeury($pool);
    // queryStream($pool);
});


$pool->translation(function($connection){
    $connection->query("INSERT INTO blog_test (content) VALUES ('hello world success')");
    // throw new Exception("Error Processing Request", 1);
})->then(function($result){
    var_dump($result);
}, function($error){
    var_dump($error->getMessage());
});