从Android应用程序访问MySQL中的另一个数据库

时间:2014-08-30 03:46:52

标签: php android mysql multiple-databases

我正在使用XAMPP与PHP和PHPMyAdmin作为接口,并尝试从一个数据库,在线门户中查询信息,并在一个操作中插入另一个数据库androidchatterdatabase。鉴于下面的代码,它不允许从$dbOnlinePortal查询信息,就好像我将查询语句从$dbOnlinePortal->query()更改为$db->query()一样,它会显示结果,但会返回' 0'从onlineportal.types和onlineportal.campaigns中选择时。

我可以在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;

2 个答案:

答案 0 :(得分:1)

使用insert stmt插入另一个DB的语法是:

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());";

答案 1 :(得分:0)

只是一个细节:如果您正在使用WAMP或MAMP,意味着本地服务器,则打开2个或更多数据库将起作用。但是,在生产模式中,您必须检查它是否可能,因为它取决于您的网站提供商。 在许多情况下,如果您有两个不同的帐户,每个帐户都有一个数据库,出于安全原因,您将无法从第一个帐户的脚本中打开第二个数据库(第二个帐户)。如果两个数据库位于两个完全不同的Web服务上,那肯定是不可能的。

因此,在编码之前执行一个小测试,以避免以后发现问题。

如果您无法从其他帐户访问一个数据库,唯一安全的方法是在帐户2上放置一个脚本,您将从帐户1中的脚本调用。接收&#34 ;为了"从脚本1开始,脚本2将查询DB-2,准备答案,将其发送回脚本1,脚本1将对其进行解码并在其上使用DB1查询。