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

कैसे लार्वेल में एक mysql संग्रहीत कार्यविधि से सेट एकाधिक परिणाम लाने के लिए?

मैं निम्नलिखित कोड का उपयोग कर रहा हूं और यह त्रुटिपूर्ण रूप से काम करता है। अपनी आवश्यकताओं के अनुरूप इसे बदलें।

public static function CallRaw($procName, $parameters = null, $isExecute = false)
{
    $syntax = '';
    for ($i = 0; $i < count($parameters); $i++) {
        $syntax .= (!empty($syntax) ? ',' : '') . '?';
    }
    $syntax = 'CALL ' . $procName . '(' . $syntax . ');';

    $pdo = DB::connection()->getPdo();
    $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true);
    $stmt = $pdo->prepare($syntax,[\PDO::ATTR_CURSOR=>\PDO::CURSOR_SCROLL]);
    for ($i = 0; $i < count($parameters); $i++) {
        $stmt->bindValue((1 + $i), $parameters[$i]);
    }
    $exec = $stmt->execute();
    if (!$exec) return $pdo->errorInfo();
    if ($isExecute) return $exec;

    $results = [];
    do {
        try {
            $results[] = $stmt->fetchAll(\PDO::FETCH_OBJ);
        } catch (\Exception $ex) {

        }
    } while ($stmt->nextRowset());


    if (1 === count($results)) return $results[0];
    return $results;
}

उदाहरण कॉल:

$params = ['2014-01-01','2014-12-31',100];
$results = APIDB::CallRaw('spGetData',$params);

परिणामी कॉल होगी:

CALL spGetData(?,?,?)

यदि केवल एक परिणाम सेट है, तो इसे वैसे ही वापस कर दिया जाएगा। यदि अधिक हैं, तो यह परिणाम सेट की एक सरणी लौटाएगा। कुंजी $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true); . इसके बिना, एक भयानक SQLSTATE[HY000]: General error: 2053 अपवाद फेंक दिया जाएगा।

कोशिश {} पकड़ () ब्लॉक का उपयोग उन परिणामों को खत्म करने के लिए किया जाता है जिन्हें प्राप्त नहीं किया जा सकता है। विशेष रूप से, मेरे पास ऐसी प्रक्रियाएं हैं जो दो परिणाम लौटाती हैं, एक अद्यतन (या अन्य निष्पादन कथन) के परिणामस्वरूप और अंतिम वास्तविक डेटा के रूप में। fetchAll() . पर दिया गया अपवाद एक निष्पादन क्वेरी के साथ PDOException होगा ।

चेतावनी:फ़ंक्शन अनुकूलित नहीं है। आप पैरामीटर के माध्यम से एक सिंगल पास के साथ इसे फिर से लिख सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL क्वेरी का चयन करें - किसी मान के केवल पहले 10 वर्ण प्राप्त करें

  2. JSON_EXTRACT () - MySQL में JSON दस्तावेज़ से डेटा लौटाएं

  3. प्राथमिक कुंजी को डंप किए बिना mysqldump तालिका

  4. एसक्यूएल में यूनियन के बाद कहां बयान?

  5. MySQL में जॉइन का उपयोग करते समय अस्पष्ट कॉलम त्रुटियों से बचना