PHP

Подключение несколько БД через require

Здравствуйте
Есть обработчик (рис 1) он осуществляет подключение к БД через <?php
require("db.php"); как сделать чтобы подключение было к нескольким БД????

<?php
require("db.php");

if (isset($_POST['field']) && isset($_POST['value'])) {
$value = mysql_real_escape_string($_POST['value']);
$field = mysql_real_escape_string($_POST['field']);

$query = "UPDATE inplace SET value ='$value' WHERE field='$field'";
$result = mysql_query($query) or die ('Query couldn\'t be executed');
if ($result) {echo 1;}
}

?>

Структура файлов (рис2)
удали 3 три лишних db.php
и в db.php пропиши так
$conn1 = mysql_connect("localhost", "root1", "");
mysql_select_db("db1",$conn1);

и в index.php
require("db.php");
$query = "UPDATE inplace SET value ='$value' WHERE field='$field'";
$result = mysql_query($query,$conn1);
mysql_select_db("db2",$conn1);
$result = mysql_query($query,$conn1);
mysql_select_db("db3",$conn1);
$result = mysql_query($query,$conn1);
mysql_select_db("db4",$conn1);
$result = mysql_query($query,$conn1);
mysql_close();

но если пользователи разные то
$conn1 = mysql_connect("localhost", "root1", "");
$conn2 = mysql_connect("localhost", "root2", "",true);
$conn3 = mysql_connect("localhost", "root3", "",true);
$conn4 = mysql_connect("localhost", "root4", "",true);
mysql_select_db("db1",$conn1);
mysql_select_db("db1",$conn2);
mysql_select_db("db1",$conn3);
mysql_select_db("db1",$conn4);

index.php
$query = "UPDATE inplace SET value ='$value' WHERE field='$field'";
mysql_query($query,$conn1);
mysql_query($query,$conn2);
mysql_query($query,$conn3);
mysql_query($query,$conn4);
mysql_close();
Nurali Aitmamatov
Nurali Aitmamatov
1 739
Лучший ответ
Павлик Виноградов к БД то подключается замечательно, но обработчик который позволяет изменять бд без mysql соглашается видеть только первую бд. БД выведены на одну html в виде фреймов
Делаешь файл config.php который возвращает массив с настройками одна из которых называется db а в качестве значения массив ключ имя базы значение массив с логином паролем хостом от этой базы данных. И пишешь где нибудь функцию которая параметром просит имя базы пожевывает массив из конфига ищет созданное подключение по имени если его нет то создает и возвращает подключение потом в том месте где тебе надо вызывашьт функцию подключения и все
Менять обработчик!
//db.class.php
class DB {

protected static $init = array();
private static $_config = array();

final static public function init($dbname = 'default') {

static::$_config = require 'config.php';

if ( ! isset(static::$init[$dbname]) OR! static::$init[$dbname] instanceof self) {
static::$init[$dbname] = self($dbname);
}
return array_exists($dbname, static::$_config) ? static::$init[$dbname] : NULL;
}

protected $connection;

final private function __construct($dbname) {
extract(static::$_config[$dbname]['connection'] + array(
'dsn' => '',
'username' => NULL,
'password' => NULL,
'persistent' => FALSE,
));
$options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
if ( ! empty($persistent)) {
$options[PDO::ATTR_PERSISTENT] = TRUE;
}
try {
$this->connection = new PDO($dsn, $username, $password, $options);
}
catch (PDOException $e) {
//$e->getMessage())
//$e->getCode()
}
return $this;
}

public function connect() {
return $this->connection;
}
public function __destruct() {
$this->connection = NULL;
}
}

//config.php
return array(
'dbname1' =>
array(
'connection' => array
(
'dsn' => 'mysql:host=localhost;port=3306;dbname=dbname1',
'username' => 'root1',
'password' => '****',
'persistent' => FALSE,
),
),

'dbname2' =>
array(
'connection' => array
(
'dsn' => 'mysql:host=localhost;port=3306;dbname=dbname2',
'username' => 'root2',
'password' => '****',
'persistent' => FALSE,
),
),
);

// index.php
require 'db.class.php';
$result1 = DB::init('dbname1')->connect()->query('UPDATE ...');
$result2 = DB::init('dbname2')->connect()->query('SELECT ...');
Егор Титов
Егор Титов
8 913
mysql_query по умолчанию использует последнее открытое соединение. Т. е. вам нужно сохранить ресурс при открытии бд и затем указывать его вторым параметром у функции mysql_query
$link = mysql_connect('localhost', 'user', 'pass');
mysql_select_db("database", $link);
$link2 = mysql_connect('localhost', 'user2', 'pass2');
mysql_select_db('database2', $link2);
$link3 = mysql_connect('localhost', 'user3', 'pass3');
mysql_select_db('database3', $link3);
$result = mysql_query($query, $link);
$result2 = mysql_query($query2, $link2);
Павлик Виноградов Спасибо большое, пробую
Павлик Виноградов А если все таки привязать все это дело к обработчику! (обработчик нужен он проверяет заполненность полей) будет выглядеть вот так?

<?php
if (isset($_POST['field']) && isset($_POST['value'])) {
$value = mysql_real_escape_string($_POST['value']);
$field = mysql_real_escape_string($_POST['field']);
$link=mysql_connect('localhost', 'k981506w_db1', '491921ad');
mysql_select_db("db.php", $link);
$link2 = mysql_connect('localhost', 'k981506w_db2', '491921ad');
mysql_select_db('db2.php', $link2);
$link3 = mysql_connect('localhost', 'k981506w_db2', '491921ad');
mysql_select_db('db3.php', $link3);
$result = mysql_query($query, $link);
$result2 = mysql_query($query2, $link2);
?>