it-swarm.com.de

Wie führe ich gespeicherte Prozeduren in Drupal aus?

Ich habe eine Website, die viel an Finanzdaten arbeitet. Meistens werden große Datenmengen bearbeitet. Daher finde ich es nützlich, diese Operationen in gespeicherten MySQL-Prozeduren auszuführen. Ich habe Prozeduren in meiner Datenbank gespeichert. Ich möchte wissen, wie ich gespeicherte Prozeduren in Drupal ausführen kann. Gibt es eine gute Methode, um gespeicherte Prozeduren in Drupal auszuführen? Wie drupal behandelt gespeicherte Prozeduren im Allgemeinen? Oder müssen wir nur die PHP verwenden, um gespeicherte Prozeduren auszuführen?

9
Mahesh Bhat

Angenommen, Sie verwenden Drupal 7), können Sie Code wie den folgenden verwenden:

// Get the Drupal database connection and change the statement class to PDOStatement.
// Save the current class for cleanup later.
$conn = Database::getConnection();
$saved_class = $conn->getAttribute(PDO::ATTR_STATEMENT_CLASS);
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement'));

// Prepare the statement and bind params
$statement = $conn->prepare("Call GetNodeList(?,?)");

$op_status = $statement->bindParam(1, $node_type, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 25);
$op_status = $statement->bindParam(2, $publish_state, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT);

// Execute the statement and reset the connection's statement class to the original.
$exec_result = $statement->execute();
$conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, $saved_class);

// Get your data
while ($row = $statement->fetchColumn(0)) {
  // ...
}

Diese Methode wurde vollständig aus diesem Artikel entfernt und hat in der Vergangenheit für mich gut funktioniert.

11
Clive

Ich bin mir nicht sicher, ob dies der richtige Weg ist, aber es hat bei mir funktioniert. Ich habe ein Legacy-System, das denselben Postgres-Datenbankserver verwendet wie Drupal).

In einem Submit-Handler musste ich Daten an dieses Legacy-System senden, das eine gespeicherte Prozedur hatte (Postgres nennt sie Funktionen), um die Daten zu verarbeiten:

// Get legacy database connection set-up in settings.php
Database::getConnection('default', 'legacy')
  ->query('SELECT * FROM stored_procedure(:named_parameter_1, :named_parameter_2, ...);', [
    ':named_parameter_1' => $value_1,
    ':named_parameter_1' => $value_2,
    ...
  ]);

Dadurch wurden die Daten erfolgreich in mein Altsystem übertragen

0
Colin Shipton