2014-08-30 34 views
1

我使用XAMPP與PHP和PHPMyAdmin作爲接口,試圖從一個數據庫,onlineportal查詢信息,並在一個操作中插入另一個數據庫androidchatterdatabase。鑑於下面的代碼,它不允許從$dbOnlinePortal查詢信息,就好像我將查詢語句從$dbOnlinePortal->query()更改爲$db->query(),它顯示結果,但在從onlineportal.types和onlineportal.campaigns中選擇時返回'0'。從Android應用程序訪問MySQL中的另一個數據庫

我可以在PHP索引文件中啓動另一個new MySQL實例,因此可以同時連接兩個數據庫嗎?還是有更好的方式來訪問一臺服務器上的多個數據庫比我在做什麼?

$dbHost = "localhost"; 
$dbUsername = "root"; 
$dbPassword = ""; 
$dbName = "androidchatterdatabase"; 
$dbName2 = "onlineportal"; 

$db = new MySQL($dbHost,$dbUsername,$dbPassword,$dbName); 
$dbOnlinePortal = new MySQL($dbHost,$dbUsername,$dbPassword,$dbName2); 


case "clickSpecial": 
     if ($userId = authenticateUser($db, $username, $password)) 
     { 
      if (isset($_REQUEST['specialId'])) 
      { 
       // Get data 
       $specialId = $_REQUEST['specialId'];  
       $timePeriod = $_REQUEST['timePeriod']; 
       $cityLocationId = $_REQUEST['cityLocationId']; 

       // Get the restaruant id, which will then serve to get the 
       // selected restaurant categories 
       $sqlRestaurantCategorization = 
         "SELECT distinct category_id 
         FROM onlineportal.types 
         WHERE user_id IN (SELECT DISTINCT user_id FROM onlineportal.campaigns WHERE id = '".$specialId."');"; 

       // Get the categeories of the restraurant  
       if($getRestaurantCategorization = $dbOnlinePortal->query($sqlRestaurantCategorization)) 
       { 
        // Insert those into the table 
        while($rowRestaurantCategorization = $dbOnlinePortal-> fetchObject($getRestaurantCategorization)) 
        { 
         $sql22 = "INSERT INTO `users_click` (`usersId`, `restaurantCategoryId`, `timePeriod`, `cityLocationId`, `clickedDt`) 
               VALUES('".$userId."','".$rowRestaurantCategorization->restaurantCategoryId."','".$timePeriod."','".$cityLocationId."',NOW());";     

         error_log("$sql22", 3 , "error_log"); 
         if ($db->query($sql22)) 
         { 
           $out = SUCCESSFUL; 
         }    
         else 
         { 
           $out = FAILED; 
         }     

        } 

       } 
       else 
       { 
        $out = FAILED; 
       }  

      } 
      else 
      { 
       $out = FAILED; 
      } 

     } 
     else 
     { 
      $out = FAILED; 
     } 

    break; 
+0

所以你說'$ dbOnlinePortal->查詢($ sqlRestaurantCategorization)'的結果是'0'?擁有兩個'新MySQL'就不會成爲問題。 – 2014-08-30 04:08:12

+0

是的,當使用$ db從online.types拉的結果,然後插入user_clicks爲「0」 – Sauron 2014-08-30 05:44:04

回答

1

的語法插入到另一個數據庫使用插入語句是這樣的:

USE `old_database`; 
INSERT INTO `new_database`.`new_table`(`column1`,`column2`,`column3`) 
SELECT `old_table`.`column2`, `old_table`.`column7`, `old_table`.`column5` 
FROM `old_table` 

編輯:

你嘗試做這樣的:

INSERT INTO `users_click` (`usersId`, `restaurantCategoryId`, `timePeriod`, `cityLocationId`, `clickedDt`) 
        VALUES ('".$userId."','(SELECT distinct category_id 
              FROM onlineportal.types 
              WHERE user_id IN (SELECT DISTINCT user_id FROM onlineportal.campaigns WHERE id = '".$specialId."'))','".$cityLocationId."',NOW());"; 
+0

不,因爲我發佈的代碼,我需要從一個數據庫中選擇,並使用該結果作爲插入到另一個數據庫的一部分。如何從案例服務器調用訪問另一個數據庫? – Sauron 2014-08-30 05:42:22

+0

我想我必須看到一些數據才能完成此操作 – MB34 2014-08-30 13:15:16

+0

代碼位於'$ sql22'的插入語句中 – Sauron 2014-08-30 15:18:38

0

只是一個細節:如果您使用WAMP或MAMP,即本地服務器,則打開2或更多的數據庫將工作。但是,在生產模式下,您必須檢查是否可能,因爲它取決於您的網站提供商。 在許多情況下,當您有兩個不同的帳戶時,每個帳戶都有一個數據庫,出於安全原因,您將無法從第一個帳戶的腳本打開第二個數據庫(第二個帳戶)。如果這兩個數據庫是兩個完全不同的web服務,這肯定是不可能的。

因此,在編碼之前進行一個小測試,以避免以後發現問題。

如果您無法從其他帳戶訪問一個數據庫,唯一安全的方法是將腳本放在帳戶2上,您將從帳戶1中的腳本撥打電話。從腳本1接收到「訂單」 ,腳本2將查詢DB-2,準備答案,將其發送回腳本1,腳本1將對其進行解碼並將其用於DB1查詢。

+0

我打算將所有內容保留在同一個帳戶上,即使在生產模式下也是如此。但是,我將擁有多個數據庫,但我絕不會擁有多個帳戶,因爲數據需要分離,但仍可從Android應用程序和Rails應用程序訪問。 – Sauron 2014-09-02 15:33:17

相關問題