Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Dừng truy vấn thông qua pdo

Vấn đề chính ở đây là chia sẻ PID giữa yêu cầu không đồng bộ của bạn tạo ra báo cáo và tập lệnh sẽ ngăn chặn nó.

Bạn có thể lấy PID của mình bằng cách sử dụng:

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

Và bạn có thể sử dụng một cái gì đó như php-shared-memory để tạo một biến được chia sẻ giữa các tập lệnh của bạn. Nếu bạn không sử dụng Composer cho các bộ phận phụ thuộc vào dự án của mình, thì thư viện này có một bản phát hành độc lập (1.5.0, tại đây ).

Mẫu thực hiện:

<?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. Đối chiếu MySQL nào tốt nhất để chấp nhận tất cả các ký tự unicode?

  2. Kiểu dữ liệu tốt nhất để lưu trữ URL trong cơ sở dữ liệu MySQL là gì?

  3. Tìm kiếm MYSQL REGEXP trong chuỗi JSON

  4. JPA Lưu sai ngày trong cơ sở dữ liệu MySQL

  5. Đặt lại mật khẩu gốc MySQL bằng câu lệnh ALTER USER sau khi cài đặt trên Mac