Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zatrzymaj zapytanie przez pdo

Głównym problemem jest tutaj współdzielenie identyfikatora PID między żądaniem asynchronicznym, które generuje raport, a skryptem, który powinien go zatrzymać.

Możesz uzyskać swój PID za pomocą:

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

I możesz użyć czegoś takiego jak php-shared-memory aby utworzyć wspólną zmienną między twoimi skryptami. Jeśli nie używasz Composera dla zależności projektu, ta biblioteka ma samodzielną wersję (1.5.0, tutaj ).

Przykład wdrożenia:

<?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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Maksymalna długość tekstu typu MySQL

  2. MySQL | Nie możesz określić tabeli docelowej „a” do aktualizacji w klauzuli FROM

  3. Co lepsze - wiele małych stolików czy jeden duży stół?

  4. Cronjob czy MySQL?

  5. MySQL IF ELSEIF w zapytaniu wybierającym