Saklı yordam "senkronizasyon dışı Komutları" neden

3 Cevap php

Ben bir mysql saklı yordamı ile bir sorgu çalıştırıyorum:

$AddProf_qr = mysql_query("call AddStudent('$d_Pass', '$d_Titl', '$d_Firs', '$d_Midd',  '$d_Last', '$d_Addr', '$d_City', '$d_Stat', '$d_County',  '$d_Zipc', $d_Gend, '$d_Birh', '$d_Phom', '$d_Phoh', '$d_Phoo', '$d_Email', '$d_Webs', '$d_Natn', '$d_Profsn',  '$d_Compny', '$d_Desig', $d_ProfAcc)", $this->c_remote) or die ("first call" . mysql_error($this->c_remote));

Ben çağrı sadece bir sonuç almak için gerekiyordu yaşıyorum: @ @ ıDENTıTY = bir dizi;

$AP_result = mysql_fetch_array($AddProf_qr);
$CurrentSID = $AP_result['@@IDENTITY'];

hangi çalışıyor. i hemen bundan sonra başka mysql güncelleme sorgusu çalıştırdığınızda ama, söylemeye bir hata veriyor:

Error: 2014 (CR_COMMANDS_OUT_OF_SYNC) Message: Commands out of sync; you can't run this command now

i sokulmasına denedim:

mysql_free_result($AddProf_qr);

ama hala aynı.

The MySQL call executes fine also the rest of the script runs without issues the above is commented out. but they don't run at the same time. My best guess is, the call is doing something that's messing this up.

3 Cevap

Depolanmış yordam birden resultsets dönüyor. Bkz this post

Çözüm?

  • Kullan mysqli_multi_query
  • Antik mysql kütüphanesini kullanarak durdurmak - mysqli'nin in i "Geliştirilmiş" anlamına - iyi bir sebep.

@DMin Yes that's would work, but you'll crash the server sooner or later. Just make the math, one resquest to a page that makes 3 * number of procedures to database! Just think about it!

[GÜNCELLEME] çözümü:

$aCategory = array();
$it=0;
$res = $mysqli->multi_query( "call ListCategory();" );
if( $res ) {
  do {
    if ($result = $mysqli->store_result()) { 

        while( $row = $result->fetch_row() ) {
                $aCategory[$it] =$row;
                $it= $it + 1;
        }
        $result->close();
    }
  } while( $mysqli->next_result() );
}

foreach($aCategory as $row){
    echo . $row[0] . " - " . $row[1] . "<br />";
} 

Sadece bir sonraki Rutin aramak için hazır olduğunu eklemek istedim.

PS: Bu arada ben kullanamadı

echo $aCategory['category_id'] ; 
//or 
echo $aCategory->category_id;
//just
echo $aCategory[0] 

Buradan Çıkış: http://us3.php.net/manual/en/function.mysql-query.php yorumlarında, bir adam o MYSQL_MULTI_RESULTS (131072) bağlantısı bayrağı ayarlayarak çalışma yaptı iddia ediyor.

Ama mysqli kullanmak çok daha iyi olurdu ...