sql >> データベース >  >> RDS >> Mysql

pdoによるクエリの停止

    ここでの主な問題は、レポートを生成する非同期リクエストと、レポートを停止するスクリプトの間でPIDを共有することです。

    次を使用してPIDを取得できます:

        $stmt = $dbh->prepare("SELECT CONNECTION_ID()");
        $stmt->execute();
        $pid = $stmt->fetchColumn();
    

    また、php-shared-memory のようなものを使用できます。 スクリプト間で共有変数を作成します。プロジェクトの依存関係にComposerを使用していない場合、このライブラリにはスタンドアロンリリースがあります(1.5.0、ここ

    実装サンプル:

    <?php
    
    if (!include __DIR__ . '/vendor/autoload.php')
    {
        die('You must set up the project dependencies.');
    }
    
    use Fuz\Component\SharedMemory\SharedMemory;
    use Fuz\Component\SharedMemory\Storage\StorageFile;
    
    // your intializations here
    
    $storage = new StorageFile("/tmp/shared.{$user_id}.sync");
    $shared = new SharedMemory($storage);
    
    if (!isset($_POST['cancel_request']))
    {
        $stmt = $dbh->prepare("SELECT CONNECTION_ID()");
        $stmt->execute();
        $pid = $stmt->fetchColumn();
    
        $shared->pid = $pid;
    
        // your long query here
    
        $shared->destroyStorage();
    }
    else
    {
        // kills pid
        $pid = $shared->pid;
        if (!is_null($pid))
        {
            $dbh->exec("KILL {$pid}");
        }
    }
    


    1. SQLAlchemy-テーブルのリストを取得する

    2. 断続的なMySQLサーバーがなくなったエラー

    3. 破損したデータベースpostgresqlを修復します

    4. Rのグループによる列の連結