Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Procedura składowana MySQL spowodowała `Niezsynchronizowane polecenia`

Wygląda na to, że istnieje paskudny błąd (lub funkcja), który objawia się podczas wywoływania procedury składowanej, która zwraca zestaw wyników. . Tj. procedura składowana, która kończy się instrukcją select bez klauzuli INTO (patrz przykład poniżej).

Sterownik mysqli (prawdopodobnie) zwraca 2 zestawy wyników. Pierwszy to ten, który został zwrócony z procedury składowanej, a drugi fikcyjny, pusty zestaw wyników. To tak, jakby wydano polecenie wielokrotnego zapytania. Jednym z rozwiązań tego problemu (które nie psuje się w przypadku zwykłych zapytań (np. SELECT)), jest użycie tego fałszywego zestawu wyników po przetworzeniu prawidłowego (pierwszego).

Przykładowy kod 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";
  }
}

Przykładowa procedura składowana:

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. Laravel ma wiele relacji, liczba polubień i komentarzy pod postem

  2. Zachowanie wartości pól tekstowych nawet po odświeżeniu

  3. MySQL wybierz SUMA wyników z LIMIT

  4. MySQL:Po co używać VARCHAR(20) zamiast VARCHAR(255)?

  5. MySQLSyntaxErrorException w pobliżu ? podczas próby wykonania Przygotowanego Oświadczenia