2015-12-28 2 views
0

Я пытаюсь подключиться к нескольким базам данных одновременно, и у меня проблемы. Этот запрос отлично работает с моим локальным сайтом. (Это не имя пользователя или пароль, таким образом «корень, корень.»)Несколько соединений с базой данных с PDO

$dsn = "mysql:host=localhost;dbname=gbase;charset=utf8"; 
$opt = array(
    PDO::ATTR_ERRMODE   => PDO::ERRMODE_EXCEPTION, 
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 
); 

$pdo = new PDO($dsn,'root','root', $opt); 

Я использовал this discussion в качестве руководства при создании запроса с несколькими базами данных. Я заменил весь код выше с этим:

try { 
$db1 = new PDO('mysql:dbname=gbase;host=localhost', 'root', 'root'); 
$db2 = new PDO('mysql:dbname=glife;host=localhost', 'root', 'root'); 
} catch (PDOException $ex) { 
    echo 'Connection failed: ' . $ex->getMessage(); 
} 

Но я получаю эти сообщения об ошибках:

Примечание: Неопределенная переменная: PDO в /Applications/MAMP/htdocs/gx/index.php на линии 164

Фатальная ошибка: Вызов к функции члена подготовить() на нуль в /Applications/MAMP/htdocs/gx/index.php на линии 164

И это строка 64:

$stm = $pdo->prepare("SELECT A.Site, A.URL, A.Title, A.Article 
FROM 1_about A 

Я подозреваю, что мне нужно каким-то образом интегрировать мой новый код с моим исходным кодом, а не просто заменить его. Однако я не понимаю, что происходит. Может ли кто-нибудь показать мне правильный способ написать запрос с несколькими базами данных?

Редактировать: Ниже приведен весь код, который я использую.

try { 
$db1 = new PDO('mysql:dbname=geobase;host=localhost', 'root', 'root'); 
$db2 = new PDO('mysql:dbname=geolife;host=localhost', 'root', 'root'); 
} catch (PDOException $ex) { 
echo 'Connection failed: ' . $ex->getMessage(); 
} 

$stm = $pdo->prepare("SELECT A.Site, A.URL, A.Title, A.Article 
FROM 1_about A 
WHERE A.Site = 'g1' AND A.URL = 'webranger'"); 
$stm->execute(array(
// 'MyURL'=>'%'.$MyURL.'%' 
)); 

while ($row = $stm->fetch()) 
{ 
$Article = $row['Article']; 
} 

echo $Article; 
+0

Итак, вы изменили '$ pdo' на' $ db1' и '$ db2' соответственно ... используйте их вместо этого? –

+0

Да, на самом деле имя переменной неверно. Если это просто опечатка, пожалуйста, покажите весь код или, по крайней мере, ту часть, где вы создаете экземпляры PDO и выполняете запросы. –

+0

Да, на самом деле имя переменной неверно. Если это просто опечатка, пожалуйста, покажите весь код или, по крайней мере, ту часть, где вы создаете экземпляры PDO и выполняете запросы. –

ответ

2

Вы пытаетесь вызвать функцию из неопределенного объекта. В вашем случае вы создали два экземпляра PDO, на $db1 и $db2.

Некоторые строки ниже, вы пытаетесь вызвать функцию prepare из переменной с именем $pdo. Но в коде, который вы нам показываете, переменная $pdo не существует.

Так что вам нужно изменить переменную $pdo для переменной $db1 или переменной $db2. Зависит от того, какое соединение вы хотите использовать. Пример:

$stm = $db1->prepare("SELECT A.Site, A.URL, A.Title, A.Article 
FROM 1_about A 
WHERE A.Site = 'g1' AND A.URL = 'webranger'"); 

Только это! : D

+0

Теперь я получаю сообщение об ошибке «Уведомление: неопределенная переменная: статья в /Applications/MAMP/htdocs/gx/index.php в строке 177», но это, вероятно, просто простая ошибка, которую я могу исправить. Еще один вопрос: что, если мне нужно одновременно запрашивать таблицы из двух разных баз данных? Например, предположим, что я хотел присоединиться к таблице из Database1 с таблицей из Database2? –

+0

Ну, я никогда не пробовал раньше, но я думаю, что вы можете поместить имя базы данных спереди f имя таблицы, например: 'database1.table1' и' database2.table2' –

+0

ОК, это имеет смысл. –