Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да променя съпоставянето по подразбиране на таблица?

  2. MySQL ON DUPLICATE KEY вмъкнете в таблица за одит или журнал

  3. MySQL - Как да анализирам стойност на низ във формат DATETIME в инструкция INSERT?

  4. Използвайте MySQL релационни бази данни на CentOS 5

  5. CodeIgniter:Как да направите заявка за избор (различно име на поле) MySQL