sql >> Databáze >  >> RDS >> Mysql

Zastavit dotaz přes pdo

Hlavním problémem je zde sdílet PID mezi vaším asynchronním požadavkem, který generuje zprávu, a skriptem, který by to měl zastavit.

Své PID můžete získat pomocí:

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

A můžete použít něco jako php-shared-memory k vytvoření sdílené proměnné mezi vašimi skripty. Pokud nepoužíváte Composer pro své projektové závislosti, má tato knihovna samostatnou verzi (1.5.0, zde ).

Ukázka implementace:

<?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. Na jaký sloupec by měl být umístěn seskupený index?

  2. Jaké jsou rozdíly mezi zpětným zaškrtnutím a jednoduchou uvozovkou? Mohu použít příkaz IF v dotazu, jak je uvedeno výše?

  3. Jak definovat vlastní objednávku ORDER BY v mySQL

  4. Import .csv se sloupcem časového razítka (dd.mm.yyyy hh.mm.ss) pomocí psql \copy