Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL संग्रहीत कार्यविधि के कारण `कमांड सिंक से बाहर`

ऐसा लगता है कि एक खराब बग (या विशेषता) है जो एक संग्रहीत कार्यविधि को कॉल करते समय प्रकट होता है जो परिणाम सेट देता है। . अर्थात। एक संग्रहीत कार्यविधि जो बिना किसी INTO क्लॉज के चयन कथन के साथ समाप्त होती है (नीचे उदाहरण देखें)।

mysqli ड्राइवर (उचित रूप से) 2 परिणाम सेट देता है। पहला संग्रहित प्रक्रिया से लौटाया गया और दूसरा एक डमी, खाली परिणाम सेट। यह ऐसा है जैसे एक से अधिक क्वेरी कमांड जारी किया गया था। इसका एक समाधान (जो सामान्य (उदाहरण के लिए) प्रश्नों पर नहीं टूटता), वैध (पहले) को संसाधित करने के बाद इस डमी परिणाम सेट का उपभोग करना है।

उदाहरण 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. क्या मैं Java PooledConnections का सही उपयोग कर रहा हूँ?

  2. MySQL - फिक्स एरर - वर्डप्रेस डेटाबेस एरर डुप्लीकेट एंट्री कुंजी के लिए प्राथमिक क्वेरी के लिए सम्मिलित करें wp_options में

  3. डेटाबेस खाली है या नहीं यह जांचने के लिए SQL (कोई टेबल नहीं)

  4. MySQL में COUNT का उपयोग करते समय शून्य के बजाय 0 कैसे लौटाएं?

  5. MySQL का चयन करें जहां एकाधिक मानों के बराबर है