Mysql
 sql >> Baza danych >  >> RDS >> Mysql

jak pobrać wiele zestawów wyników z procedury składowanej mysql w laravel?

Używam poniższego kodu i działa bezbłędnie. Zmień go tak, aby odpowiadał Twoim potrzebom.

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;
}

Przykładowe połączenie:

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

Otrzymane połączenie będzie:

CALL spGetData(?,?,?)

Jeśli istnieje tylko jeden zestaw wyników, zostanie on zwrócony bez zmian. Jeśli jest ich więcej, zwróci tablicę zestawów wyników. Klucz używa $pdo->setAttribute(\PDO::ATTR_EMULATE_PREPARES, true); . Bez tego okropny SQLSTATE[HY000]: General error: 2053 zostanie zgłoszony wyjątek.

Blok try{} catch() służy do eliminacji zestawów wyników, których nie można pobrać. W szczególności mam procedury, które zwracają dwa zestawy wyników, jeden w wyniku aktualizacji (lub innej instrukcji wykonania), a ostatni jako rzeczywiste dane. Wyjątek zgłoszony w fetchAll() z zapytaniem wykonawczym będzie PDOException .

Uwaga:funkcja nie jest zoptymalizowana. Możesz go przepisać za pomocą jednego przejścia przez parametry.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyjątek bezpieczeństwa przy użyciu MySQL i Entity Framework na godaddy

  2. Jak dodać indeksy do tabel MySQL?

  3. Jak zabezpieczyć plik konfiguracyjny bazy danych w projekcie?

  4. Zapisywanie ramki danych do tabeli MySql DB

  5. Porównaj tylko dzień i miesiąc z polem daty w mysql