Przykładowy, nieco uproszczony fragment kodu, który powoduje błąd:

  1. <?php
  2. $result = mod_mysql_query("DROP PROCEDURE IF EXISTS procedurka");
  3. echo 'mysql_error() = "'.mysql_error().' (Line: '.__LINE__.')".'."<br>\n";
  4.  
  5. $procedure = "CREATE PROCEDURE procedurka(pole1 int(8) unsigned,
  6. pole2 int(8) unsigned,
  7. pole3 mediumint(8) unsigned,
  8. pole4 varchar(64))
  9. BEGIN
  10. INSERT INTO tabelka (pole1,
  11. pole2,
  12. pol3,
  13. pole4)
  14. VALUES (pole1,
  15. pole2,
  16. pole3,
  17. pole4);
  18. SELECT LAST_INSERT_ID() number;
  19. END";
  20.  
  21. $result = mysql_query($procedure);
  22. echo 'mysql_error() = "'.mysql_error().' (Line: '.__LINE__.')".'."<br>\n";
  23.  
  24. $query = "CALL procedurka(".$pole1.",
  25. ".$pole2.",
  26. ".$pole3.",
  27. '');";
  28.  
  29. $result = mysql_query($query);
  30. echo 'mysql_error() = "'.mysql_error().' (Line: '.__LINE__.')".'."<br>\n";
  31.  
  32. $row = mysql_fetch_assoc($result);
  33. // Do tego momentu all OK!
  34.  
  35. $result = mysql_query("SELECT * FROM tabelka");
  36. echo 'mysql_error() = "'.mysql_error().' (Line: '.__LINE__.')".'."<br>\n"; // << "Commands out of sync; you can't run this command now"
  37. ?>


Czytałem o tym na necie, na pewnych stronach piszą, że to bug mysql.
Ponoć pomaga reconnect, lub użycie funkcji typu mysql_free_result(), lub skorzystanie z mysqli, ale jak na razie nic mi to nie pomogło, albo coś źle robię.
Może procedurę źle napisałem?

Wersja MySQL: 5.1.35.
Wersja PHP: 5.3.0.

Any ideas?