Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Prosedur tersimpan MySQL menyebabkan `Perintah tidak sinkron`

Tampaknya ada bug (atau fitur) buruk yang dimanifestasikan saat memanggil prosedur tersimpan yang mengembalikan kumpulan hasil. . Yaitu. prosedur tersimpan yang diakhiri dengan pernyataan pilih tanpa klausa INTO (lihat contoh di bawah).

Driver mysqli (mungkin) mengembalikan 2 set hasil. Yang pertama adalah yang dikembalikan dari prosedur tersimpan dan yang kedua adalah kumpulan hasil dummy dan kosong. Ini seperti perintah beberapa kueri yang dikeluarkan. Salah satu solusi untuk ini (yang tidak rusak pada kueri biasa (mis. SELECT), adalah dengan menggunakan set hasil dummy ini setelah memproses yang sah (yang pertama).

Contoh kode php

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";
  }
}

Contoh prosedur tersimpan:

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. Kegagalan Basis Data untuk Situs WordPress

  2. MySQL:NULL vs

  3. cara menggunakan (useUnicode=yes characterEncoding=UTF-8) dengan DBCP

  4. Mengapa tabel InnoDB saya memiliki nilai aneh untuk jumlah record?

  5. tipe data skema sails-mysql