Mysql
 sql >> база данни >  >> RDS >> Mysql

Съхранената процедура в MySQL е причинила „Командите не са синхронизирани“.

Изглежда има неприятна грешка (или функция), която се проявява при извикване на съхранена процедура, която връща набор от резултати. . т.е. съхранена процедура, която завършва с оператор select без клауза INTO (вижте примера по-долу).

Драйверът на mysqli (вероятно) връща 2 набора резултати. Първият е този, върнат от съхранената процедура, а вторият фиктивен празен набор от резултати. Сякаш е издадена команда за множество заявки. Едно решение за това (което не се нарушава при обичайните (напр. SELECT) заявки) е да се използва този фиктивен набор от резултати след обработка на законния (първия).

Примерен 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";
  }
}

Примерна съхранена процедура:

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. Мога ли да накарам електронните таблици на Google Drive да действат като MySQL база данни?

  2. Получавате ли последния вмъкнат идентификатор в тригер?

  3. Създаването на ActiveRecord / Rails да използва действителни колони TIMESTAMP на mysql

  4. Как мога да се справя със заявки за припокриване на многоъгълници на MySQL?

  5. Как да съединя две таблици в изявление UPDATE?