Я пытаюсь подключиться к 2 базам данных на одном экземпляре MySQL из 1 PHP-скрипта.
В настоящий момент единственным способом, который я выяснил, является подключение к обеим базам данных с другим пользователем для каждого.
Я использую это в сценарии миграции, где я беру данные из исходной базы данных и вставляю их в новую, поэтому я просматриваю большие списки результатов.
Подключение к 1 базе данных, а затем попытка инициировать второе соединение с одним и тем же пользователем, просто изменяет текущую базу данных на новую.
Любые другие идеи?
Вам нужно передать логическое значение true в качестве необязательного четвертого аргумента в mysql_connect (). Дополнительную информацию см. В документации по MySQL mysql_connect () .
Если пользователь базы данных имеет доступ к обеим базам данных, и они находятся на одном сервере, вы можете использовать одно соединение и просто указать базу данных, с которой хотите работать, перед именем таблицы. Пример:
SELECT column FROM database.table
В зависимости от того, что вам нужно сделать, вы можете сделать INSERT INTO
и сохранить кучу времени обработки.
INSERT INTO database1.table (column) SELECT database2.table.column FROM database2.table
Лукас прав. Я предполагаю, что обе базы данных размещены на одном хосте.
В качестве альтернативы вы можете создать только соединение 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 --
Если это вариант, используйте PDO: у вас может быть так много соединений с базами данных, как вам нравится.
Кроме того, если вы снова и снова выполняете одни и те же запросы, вы можете использовать подготовленные операторы.
Я бы предложил использовать два обработчика соединения
$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
Вы можете легко использовать 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); ?>
Сначала подключить две базы данных
$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);