PHP

2008-10-24 13 views
18

में एक ही समय में 2 डेटाबेस से कनेक्ट करने के लिए कैसे मैं 1 PHP स्क्रिप्ट से MySQL के उसी उदाहरण पर 2 डेटाबेस से कनेक्ट करने का प्रयास कर रहा हूं।PHP

इस समय मैंने एकमात्र तरीका निकाला है, प्रत्येक डेटाबेस के लिए एक अलग उपयोगकर्ता के साथ दोनों डेटाबेस से कनेक्ट करना है।

मैं इसे माइग्रेशन स्क्रिप्ट में उपयोग कर रहा हूं जहां मैं मूल डेटाबेस से डेटा पकड़ रहा हूं और इसे नए में डाल रहा हूं, इसलिए मैं परिणामों की बड़ी सूचियों के माध्यम से लूपिंग कर रहा हूं।

1 डेटाबेस से कनेक्ट करना और फिर उसी उपयोगकर्ता के साथ दूसरा कनेक्शन शुरू करने का प्रयास करने से केवल मौजूदा डेटाबेस को नए में बदल दिया जाता है।

कोई अन्य विचार?

+0

यदि आप 2 कनेक्शन हैंडलर का उपयोग करते हैं, तो आप निश्चित रूप से यह सुनिश्चित करना चाहते हैं कि आप उनका उपयोग करने के बाद दोनों कनेक्शन बंद कर दें। - अरुणभ दास –

+0

लेकिन स्क्रिप्ट स्क्रिप्ट समाप्त होने पर PHP डेटाबेस से डिस्कनेक्ट हो जाएगा http://php.net/manual/en/function.mysql-close.php –

उत्तर

22

आपको mysql_connect() के वैकल्पिक चौथे तर्क के रूप में एक बुलियन सत्य को पारित करने की आवश्यकता होगी। अधिक जानकारी के लिए PHP's mysql_connect() documentation देखें।

3

मैं दो कनेक्शन संचालकों

$old = mysql_connect('old.database.com', 'user', 'pass); 
    mysql_select_db('old_db', $old); 


    $new = mysql_connect('new.database.com','user','pass); 
    mysql_select_db('new_db', $new) 

    // run select query on $old 
    // run matching insert query on $new 
+1

यह केवल तभी काम करता है जब दोनों डेटाबेस अलग-अलग सर्वर पर हों। –

8

लुकास सही है का उपयोग करते हुए सुझाव है। मुझे लगता है कि दोनों मेजबान एक ही होस्ट पर होस्ट किए जाते हैं।

वैकल्पिक रूप से, आप केवल 1 डीबी कनेक्शन बना सकते हैं और आवश्यकतानुसार डेटाबेस को स्वैप कर सकते हैं। यहां छद्म कोड है।

$db_conn = connect_db(host, user, pwd); 
mysql_select_db('existing_db', $db_conn); 
-- do selects and scrub data -- 
mysql_select_db('new_db', $db_conn); 
-- insert the required data -- 
13

अपने डेटाबेस उपयोगकर्ता दोनों डेटाबेस के लिए पहुँच गया है और वे एक ही सर्वर पर हैं, तो आप एक कनेक्शन का उपयोग कर सकते हैं और सिर्फ डेटाबेस आप तालिका नाम से पहले के साथ काम करना चाहते हैं। उदाहरण:

SELECT column 
FROM database.table 

आप क्या करने की जरूरत पर निर्भर करता है, तो आप एक INSERT INTO करते हैं और प्रसंस्करण समय का एक समूह को बचाने के लिए सक्षम हो सकता है।

INSERT INTO database1.table (column) 
SELECT database2.table.column 
FROM database2.table 
+0

मैं यह पता लगाने के लिए बहुत कठिन प्रयास कर रहा था कि पुराना PHP ऐप यह कैसे कर रहा था। यह अब समझ में आता है। – zkent

3

यदि यह एक विकल्प है, तो पीडीओ का उपयोग करें: आप जितने चाहें उतने डेटाबेस कनेक्शन खोल सकते हैं।

प्लस, अपने प्रश्नों को ऊपर और ऊपर निष्पादित करने पर विचार करते हुए, आप तैयार कथन का उपयोग कर सकते हैं।

0

आप आसानी से निम्नलिखित कोड के साथ एक ही समय में 2 डेटाबेस का उपयोग कर सकते हैं:

<?php 
    define('HOST', "YOURHOSTNAME"); 
    define('USER', "YOURHOSTNAME"); 
    define('PASS', "YOURHOSTNAME"); 
    define('DATABASE1', "NAMEOFDATABASE1"); 
    define('DATABASE2', "NAMEOFDATABASE2"); 

    $DATABASE1 = mysqli_connect(HOST, USER, PASS, DATABASE1); 
    $DATABASE2 = mysqli_connect(HOST, USER, PASS, DATABASE2); 
    if(!$DATABASE1){ 
     die("DATABASE1 CONNECTION ERROR: ".mysqli_connect_error()); 
    } 
    if(!$DATABASE2){ 
     die("DATABASE2 CONNECTION ERROR: ".mysqli_connect_error()); 
    } 


    $sql = "SELECT * FROM TABLE"; /* You can use your own query */ 

    $DATABASE1_QUERY = mysqli_query($DATABASE1, $sql); 
    $DATABASE2_QUERY = mysqli_query($DATABASE2, $sql); 

    $DATABASE1_RESULT = mysqli_fetch_assoc($DATABASE1_QUERY); 
    $DATABASE2_RESULT = mysqli_fetch_assoc($DATABASE2_QUERY); 

    /* SHOW YOUR RESULT HERE WHICH DATABASE YOU WANT FROM */ 
    echo $DATABASE1_RESULT['id']; 
    echo $DATABASE2_RESULT['id']; 


    /*After complete your all work don't forgot about close database connections*/ 
    mysqli_close($DATABASE1); 
    mysqli_close($DATABASE2); 
     ?> 
+1

PHP में सामान्य मार्गदर्शिका चर के रूप में पूंजीकृत नहीं किया जाना चाहिए, लेकिन '$ camelCased'। पूंजीकृत शब्दों को पढ़ने के लिए कठिन हैं। – Martin

+0

@ मार्टिन - आपकी पसंद के अनुसार आप अपनी शैली का उपयोग कर सकते हैं। क्योंकि मैं कुछ उदाहरणों के साथ इस प्रश्न के बारे में उत्तर देने का प्रयास कर रहा हूं। –

-1

पहले कनेक्ट दो डाटाबेस

$database1 = mysql_connect("localhost","root","password"); 
$database2 = mysql_connect("localhost","root","password"); 

अब डाटाबेस

$database1_select = mysql_select_db("db_name_1") or die("Can't Connect To Database",$database1); 
$database_select = mysql_select_db("db_name_2") or die("Can't Connect To Database",$database2); 

अब अगर हम चाहते हैं उसे चुनें क्वेरी चलाने के लिए अंत में डेटाबेस नाम निर्दिष्ट करें,

$select = mysql_query("SELECT * FROM table_name",$database1); 
+0

यह काम नहीं करता है। आपको mysql_connect में चौथे पैरामीटर के रूप में सत्य पारित करने की आवश्यकता है अन्यथा यह पिछले कनेक्शन को वापस कर देगा –

संबंधित मुद्दे