วิธีการดำเนินการขั้นตอนการจัดเก็บใน drupal?


9

ฉันมีเว็บไซต์ที่ทำงานด้านข้อมูลทางการเงินเป็นจำนวนมาก มันเกี่ยวข้องกับการดำเนินการกับข้อมูลจำนวนมากส่วนใหญ่ ดังนั้นฉันพบว่ามีประโยชน์ในการดำเนินการเหล่านั้นในขั้นตอนการจัดเก็บ mysql ฉันมีขั้นตอนการจัดเก็บในฐานข้อมูลของฉัน ฉันต้องการที่จะรู้ว่าฉันสามารถดำเนินการขั้นตอนการจัดเก็บใน drupal ได้อย่างไร? มีวิธีการที่ดีในการดำเนินการตามขั้นตอนการจัดเก็บใน drupal? drupal จัดการขั้นตอนการจัดเก็บโดยทั่วไปได้อย่างไร หรือเราแค่ต้องใช้ PHP เพื่อดำเนินการขั้นตอนการจัดเก็บ?


คุณค้นหาเว็บหรือไม่ Google ส่งคืนผลลัพธ์บางส่วนสำหรับ "ขั้นตอนการจัดเก็บ drupal" ที่น่าสนใจ คุณลองรหัสแล้วหรือยัง คุณบอกเราได้ไหมว่าอะไรได้ผลและอะไรไม่ได้
marcvangend

1
ใช่ฉันค้นหาใน google แล้ว ดูเหมือนว่าต้องการโค้ดไม่กี่บรรทัดในการเรียกใช้โพรซีเดอร์ที่เก็บไว้พร้อมพารามิเตอร์ มีฟังก์ชั่นตัวช่วยใน Drupal API เพื่อเรียกใช้โพรซีเดอร์ที่เก็บหรือไม่?
Mahesh Bhat

คำตอบ:


11

สมมติว่าคุณกำลังใช้ Drupal 7 คุณสามารถใช้รหัสดังนี้:

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

วิธีการนั้นถูกคัดมาอย่างสมบูรณ์จากบทความนี้และทำงานได้ดีสำหรับฉันในอดีต


ขอบคุณที่คัดมา! หน้าอ้างอิงกับ "บทความนี้" ไม่สามารถแก้ไขได้
cdmo

0

ไม่แน่ใจว่านี่เป็นวิธีที่ถูกต้องหรือไม่ แต่มันได้ผลสำหรับฉัน ฉันมีระบบเดิมที่ใช้เซิร์ฟเวอร์ฐานข้อมูล Postgres แบบเดียวกันกับที่ Drupal ทำ

ในตัวจัดการการส่งฉันจำเป็นต้องส่งข้อมูลไปยังระบบเดิมซึ่งมีขั้นตอนการจัดเก็บ (Postgres เรียกพวกเขาฟังก์ชั่น) เพื่อจัดการข้อมูล:

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

นี่ทำให้ข้อมูลสำเร็จในระบบเดิมของฉัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.