Drupal'da saklı yordamlar nasıl yürütülür?


9

Finansal veriler üzerinde çok iş yapan bir web sitem var. Çoğu zaman büyük hacimli veriler üzerinde yapılan işlemleri içerir. Bu nedenle mysql saklı yordamlarda bu işlemleri yapmak yararlı buluyorum. Yordamları veritabanımda sakladım. Drupal'da saklı yordamları nasıl yürütebileceğimi bilmek istiyorum? Drupal'da saklı yordamları yürütmek için iyi bir yöntem var mı? Drupal genel olarak saklı prosedürleri nasıl işler? Yoksa sadece saklı yordamlar yürütmek için PHP kullanmak zorunda?


Web'de arama yaptınız mı? Google, "drupal saklı yordamlar" için ilginç görünen bazı sonuçlar döndürür. Kodu denedin mi? Bize neyin işe yaradığını neyin işe yaramadığını söyleyebilir misiniz?
marcvangend

1
Evet, Google'da arama yaptım. Parametreleri olan tek bir saklı yordamı yürütmek için birkaç kod satırına ihtiyaç var gibi görünüyor. Saklı yordamı yürütmek için Drupal API herhangi bir yardımcı işlevi var mı?
Mahesh Bhat

Yanıtlar:


11

Drupal 7 kullandığınızı varsayarsak, aşağıdakine benzer bir kod kullanabilirsiniz:

// 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)) {
  // ...
}

Bu yöntem tamamen bu makaleden çıkarıldı ve geçmişte benim için iyi çalıştı.


culling için teşekkürler! "bu makale" ile referans verilen sayfa çözülmüyor.
cdmo

0

Bunun doğru yol olup olmadığından emin değilim, ama benim için çalıştı. Drupal'ın yaptığı aynı Postgres veritabanı sunucusunu paylaşan eski bir sistemim var.

Bir gönderme işleyicisinde veri işlemek için saklı bir yordam (Postgres onlara fonksiyonları çağırır) olan bu eski sisteme veri göndermek gerekiyordu:

// 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,
    ...
  ]);

Bu, verileri eski sistemime başarıyla aktardı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.