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

Thủ tục được lưu trữ trong MySQL gây ra `` Lệnh không đồng bộ hóa ''

Dường như có một lỗi (hoặc tính năng) khó chịu được hiển thị khi gọi một thủ tục được lưu trữ trả về một tập hợp kết quả. . I E. một thủ tục được lưu trữ kết thúc bằng câu lệnh select mà không có mệnh đề INTO (xem ví dụ bên dưới).

Trình điều khiển mysqli (có thể có) trả về 2 tập kết quả. Đầu tiên là một được trả về từ thủ tục được lưu trữ và thứ hai là một tập kết quả giả, trống. Nó giống như một lệnh truy vấn được đưa ra. Một giải pháp cho vấn đề này (không xảy ra đối với các truy vấn thông thường (ví dụ:CHỌN)), là sử dụng tập hợp kết quả giả này sau khi xử lý tập hợp hợp pháp (đầu tiên).

Mã php mẫu

function do_query($con, $sql)
{
  if ( !($result = mysqli_query($con, $sql)) )
    throw new QueryException(mysqli_error($con));
  if ($result === true)
     return true;
  while ($row = mysqli_fetch_assoc( $result )) {
    // process rows
  }
  // Hack for procedures returning second dummy result set
  while(mysqli_more_results($con)) {
    mysqli_next_result($con);
    // echo "* DUMMY RS \n";
  }
}

Ví dụ về thủ tục được lưu trữ:

CREATE PROCEDURE selectStaleHeaders()
NOT DETERMINISTIC
SELECT TT.*
FROM one_pretty_table AS TT
  LEFT JOIN another AS AN on TT.fk_id = AN.id
WHERE TT.id IS NULL;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chế giễu PDO với phpunit

  2. Tại sao tôi nhận được thông báo 'Không thể ghi nhật ký nhị phân.' trên máy chủ MySQL của tôi?

  3. Không thể kết nối với MySQL tại localhost:3306 với người dùng root

  4. Kết hợp hai cột trong SQL cho mệnh đề WHERE

  5. Làm thế nào để chèn nhiều hàng trong một câu lệnh chèn?