2011-08-02 79 views
3

我想知道Magento是否可以連接到它的主數據庫,以及另一個不包含Magento核心信息的數據庫?Magento可以連接到另一個MySQL數據庫嗎?

例如,我希望能夠從存儲在不同服務器上不同數據庫上的WordPress安裝中查詢表格?

我的第一本能是使用mysql_connect創建一個新的數據庫連接,但是這樣做並不合適。

有沒有更「適當」的方法來完成這個?

回答

9

這裏完整的解釋:在短http://fishpig.co.uk/magento-tutorials/create-an-external-database-connection-in-magento
,你需要創建一個新的資源,並告訴Magento的利用這個資源,你的模型,即在config.xml,裏面<global>標籤:

<resources> 
     <external_db> 
      <connection> 
       <host><![CDATA[host]]></host> 
       <username><![CDATA[username]]></username> 
       <password><![CDATA[password]]></password> 
       <dbname><![CDATA[dbname]]></dbname> 
       <model>mysql4</model> 
       <type>pdo_mysql</type> 
       <active>1</active> 
      </connection> 
     </external_db> 
     <yourmodelalias_read> 
      <connection> 
       <use>external_db</use> 
      </connection> 
     </yourmodelalias_read> 
    </resources> 
+0

是這是最好的答案。如果您使用vcs並具有開發工具,舞臺和生產服務器,那麼您可能需要將標記扔到local.xml中,而不是模塊的config.xml。這樣你的各種系統可以配置不同的用戶/密碼。那麼我想我假設你的local.xml不在你的vcs中,而是你手動管理它。 – shaune

1

如果您在/lib/Varien/Db/Adapter/Mysqli.php看你可以看到,Magento的是擴展Zend_Db_Adapter_Mysqli,並在該連接的緩存副本立即存在,它正在檢查_connect()函數。

對我來說,似乎不太可能直接使用Magento Db適配器,因爲您必須重寫此功能。所以,這留下了兩個選擇:

  1. 使用Zend DB適配器,如果您以前使用過,它非常容易。
  2. 直接使用PHP的MySQL函數。確保使用PDO或MySQLi庫,而不是ext/mysql。 ext/mysql庫已經被棄用,並且很難安全使用。

http://php.net/manual/en/ref.pdo-mysql.php

http://php.net/manual/en/book.mysqli.php

http://framework.zend.com/manual/en/zend.db.html

編輯:添加Magento的連接模塊

http://www.magentocommerce.com/magento-connect/fishpig/extension/3958/fishpig_wordpress_integration

即一個自由Magento-> WordPress的橋。可能值得看看他們的來源,看看他們採取了什麼樣的道路。

0

在你的模塊等/ config.xml中添加以下代碼:

<global> 
    <resources> 
     <modulename_write> 
      <connection> 
       <use>modulename_database</use> 
      </connection> 
     </modulename_write> 
     <modulename_read> 
      <connection> 
       <use>modulename_database</use> 
      </connection> 
     </modulename_read> 
     <modulename_setup> 
      <connection> 
       <use>core_setup</use> 
      </connection> 
     </modulename_setup> 
     <modulename_database> 
      <connection> 
       <host><![CDATA[localhost]]></host> 
       <username><![CDATA[db_username]]></username> 
       <password><![CDATA[db_password]]></password> 
       <dbname><![CDATA[tablename]]></dbname> 
       <model>mysql4</model> 
       <type>pdo_mysql</type> 
       <active>1</active> 
      </connection> 
     </modulename_database> 
    </resources> 
</global> 

要使用新表中獲取數據數據庫:

<?php 
    $resource = Mage::getSingleton('core/resource'); 
    $conn  = $resource->getConnection('modulename_read'); 
    $results = $conn->fetchAll('SELECT * FROM tablename'); 

    echo "<pre>"; 
    print_r($results); 
?> 
相關問題