PHP MySQL. How to connect two (several) different MySQL databases?

The article How to connect to the MySQL database server I presented to connect to a MySQL database, one database!
If you were using those scripts trying to connect to some MySQL databases, but unfortunately can not be!
Why?
Well, PHP is configured by default allows you to connect to only one MySQL database. There is no limit! It is simply the default setting.
So how to connect to two or even several MySQL databases at the same time?

PROBLEM:
How to connect the various MySQL databases (at the same time) and send them questions?

DESCRIPTION OF THE PROBLEM:
Would you like to make your PHP script, joined at the same time with different databases and MySQL queries directed to them.
In addition, you want to control – identify which queries are to be performed by the chosen combination – the selected database.

SOLUTION:
As has already been mentioned above, the default PHP configuration allows for simultaneous connection to a MySQL database.
With this configuration corresponds to a 4 argument mysql_connect(), this is an optional argument – because, in most cases unknown and unused ;-), defined as $new_link, defaults to false.

From the documentation:
mysql_connect (string server, string username, string $password, [bool $new_link=false], [int $client_flags=0]);
$new_link
If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned. The new_link parameter modifies this behavior and makes mysql_connect() always open a new link, even if mysql_connect() was called before with the same parameters. In SQL safe mode, this parameter is ignored.

What is someone, RECOMMENDATIONS AND warning messages:
Simultaneous connection to multiple databases MySQL has many benefits. Thus, at the same time, you can manipulate the keel databases running only one PHP script. You can move data from one database to another, compare, make a backup of the selected tables, etc. You can manipulate the databases located on the same server – the host, but also located on different servers.
Simultaneous connection to keel databases in one script, and hence, to have several different connection identifiers, poses many problems. You have to remember that the link connection, which connects you with the database. Specific SQL query must be channeled to the proper base. Obviously you can have problems with this, especially when they have not yet cited, the connection identifier. This was possible because many functions that operate on the database does not require it (uses the default ID).

EXAMPLE 1:
Simple PHP code that creates direct connection to two MySQL databases

<?PHP
// Create first connection to the host named locahost1.
$con1 = @mysql_connect(‘locahost1′, ‘user’, ‘pass’, false);
if(!$con1) {
        echo “ERROR MySQL: Connect to Server locahost 1\n”;
        exit;
}
// Create a second connection to the host named locahost2.
$con2 = @mysql_connect(‘locahost2′, ‘user’, ‘pass’, true);
if(!$con2) {
        echo “ERROR MySQL: Connect to Server locahost 2\n”;
        exit;
}
// Print connection identifier $con1 and $con2
// Various IDs show two different combinations!
// The same identifiers, it is really a combination!
echo $con1.”\n”;
echo $con2.”\n”;
// Connect to the selected MySQL database – using the connection $con1.
@mysql_select_db(‘baza_mysql_1′, $con1);
// Connect to the selected MySQL database – using the connection $con2.
@mysql_select_db(‘baza_mysql_2′, $con2);
//[...]
// Close the connection to the MySQL database on the host locahost1 and locahost2 ($con1, $con2)
mysql_close($con1);
mysql_close($con2);
?>

NOTES:
1. Display the connection ID will help us determine whether in fact we are connected to different databases / hosts
2. Please pay special attention to the fourth argument of a call to mysql_connect()
- For the first call: mysql_connect(‘locahost1′, ‘user’, ‘pass’, false);
- For second and subsequent calls: mysql_connect(‘locahost2′, ‘user’, ‘pass’, true);
Using the “true” in the second function call creates a new connection!

EXAMPLE 2:
The following expanded function in PHP which can be used to connect to the database or MySQL databases.
Function:
- You can make a connection with several hosts MySQL,
- Connects us to the selected MySQL database – for a particular host,
- Sets the encoding selected in this case UTF-8 (call, client, results returned, etc.)
- Returns the appropriate message in case of failure (connection, database setup, setting the correct encoding)
- Returns the connection handle,
- Ideal for developer, we always know when something has gone wrong!

<?PHP
function connect_to_db($host, $user, $pass, $db, $link) {
        if(!($con = @mysql_connect($host, $user, $pass, $link))) {
                echo “ERROR MySQL: Connect to Server\n”;
                exit;
        }
        if(!mysql_select_db($db, $con)) {
                echo “ERROR MySQL: Connect to DataBase\n”;
                exit;
        }
        if(!mysql_query(“SET NAMES ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET NAMES ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET CHARACTER SET ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET CHARACTER SET ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_client = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_client = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_results = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_results = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_connection = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_connection = ‘utf8′\n”;
                exit;
        }
        mb_internal_encoding(“UTF-8″);
        mb_regex_encoding(“UTF-8″);
        return $con;
}
// Create first connection to the MySQL database on the host locahost1
$con1 = connect_to_db(‘locahost1′, ‘user’, ‘pass’, ‘db’, false);
// Create a second connection to the MySQL database on the host locahost2
$con2 = connect_to_db(‘locahost2′, ‘user’, ‘pass’, ‘db’, true);
// Create the third connection to the MySQL database on the host locahost3
$con3 = connect_to_db(‘locahost3′, ‘user’, ‘pass’, ‘db’, true);
// [...]
// Close connection to the database – optional
mysql_close($con1);
mysql_close($con2);
mysql_close($con3);
?>

Posted in MySQL, PHP | Tagged , , , , , , , , , , , , , | 1 Comment

PHP MySQL Jak połączyć się z dwoma (kilkoma) różnymi bazami danych MySQL?

W artykule Jak połączyć się z serwerem bazy danych MySQL zaprezentowałem podłączenie się do bazy MySQL, jednej bazy!
Gdybyście za pomocą tamtych skryptów próbowali połączyć się z kilkoma bazami MySQL, niestety nie uda się!
Dlaczego?
Otóż konfiguracja PHP domyślnie pozwala na podłączenie się tylko do jednej bazy MySQL. Nie jest to żadne ograniczenie! Jest to po prostu ustawienie domyślne.
Więc jak podłączyć się do dwóch albo nawet kilku baz MySQL w tym samym czasie?

PROBLEM:
W jaki sposób połączyć się z różnymi bazami danych MySQL (w tym samym czasie) i wysyłać do nich pytania?

OPIS PROBLEMU:
Chciałbyś aby twój skrypt PHP, połączył się jednocześnie z różnymi bazami danych MySQL i kierował do nich zapytania.
Dodatkowo chcesz sterować – określać, które zapytania mają być wykonywane przez wybrane połączenie – wybraną bazę danych.

ROZWIĄZANIE:
Jak już wyżej było wspomniane, domyślna konfiguracja PHP umożliwia jednoczesne podłączenie do jednej bazy danych MySQL.
Za tę konfigurację odpowiada 4 argument funkcji mysql_connect(), jest to argument opcjonalny – dlatego w większości przypadków nieznany i nieużywany ;-), określany jako $new_link, domyślnie ustawiony na false.

Z dokumentacji:
mysql_connect (string $server, string $username, string $password, [bool $new_link = false], [int $client_flags = 0]);
$new_link – $nowe_polaczenie;
Przy drugim wywołaniu funkcji mysql_connect() z tymi samymi argumentami, nie zostanie ustawione nowe połączenie, ale zamiast tego, zostanie zwrócony identyfikator już otwartego połączenia. Parametr $new_link zmienia to zachowanie i sprawia, że funkcja mysql_connect() zawsze otwiera nowe połączenie, nawet jeśli mysql_connect() zostało już wcześniej wywołane z tymi samymi parametrami. W trybie SQL safe mode, parametr ten jest ignorowany.

PO CO TO KOMU, ZALECENIA I OSTRZERZENIA:
Jednoczesne połączenie do kilku baz MySQL przynosi wiele korzyści. Dzięki temu, w tym samym czasie, możesz operować na kilu bazach, uruchamiając tylko jeden skrypt PHP. Możesz przenosić dane z jednej bazy do drugiej, porównywać, robić kopię bezpieczeństwa wybranych tabel, itp. Możesz operować na bazach znajdujących się na tym samym serwerze – hoście, ale również i znajdujących się na różnych serwerach.
Jednoczesne połączenie do kilu baz w jednym skrypcie, a co za tym idzie, posiadanie kilku różnych identyfikatorów połączenia, przysparza wiele problemów. Musisz pamiętać który link połączenia, łączy Cie z którą bazą danych. Konkretne zapytanie SQL musisz skierować do prawidłowej bazy. Oczywiście możesz mieć z tym problemy, głównie wtedy gdy dotychczas nie podawałeś identyfikatora połączenia. Było to możliwe, gdyż wiele funkcji operujących na bazie danych nie wymaga określenia go (używa domyślnego identyfikatora).

PRZYKŁAD 1:
Prosty kod PHP tworzący bezpośrednio połączenie z dwoma bazami danych MySQL

<?PHP
// Tworzymy pierwsze połączenie z hostem o nazwie locahost1.
$con1 = @mysql_connect(‘locahost1′, ‘user’, ‘pass’, false);
if(!$con1) {
        echo “ERROR MySQL: Connect to Server locahost 1\n”;
        exit;
}
// Tworzymy drugie połączenie z hostem o nazwie locahost2.
$con2 = @mysql_connect(‘locahost2′, ‘user’, ‘pass’, true);
if(!$con2) {
        echo “ERROR MySQL: Connect to Server locahost 2\n”;
        exit;
}
// Wyświetlamy identyfikator połączenia $con1 i $con2
// Różne identyfikatory świadczą o dwóch rożnych połączeniach!
// Takie same identyfikatory, to tak naprawdę jedno połączenie!
echo $con1.”\n”;
echo $con2.”\n”;
// Podłączamy się do wybranej bazy danych MySQL – używając połączenia $con1.
@mysql_select_db(‘baza_mysql_1′, $con1);
// Podłączamy się do wybranej bazy danych MySQL – używając połączenia $con2.
@mysql_select_db(‘baza_mysql_2′, $con2);
//[...]
// Zamykamy połączenie z bazą danych MySQL na hoście locahost1 i locahost2 ($con1, $con2)
mysql_close($con1);
mysql_close($con2);
?>

WYJAŚNIENIA:
1. Wyświetlenie identyfikatora połączenia pomoże nam stwierdzić, czy rzeczywiście jesteśmy połączeni z różnymi bazami / hostami
2. Proszę zwrócić szczególną uwagę na czwarty argument wywołania funkcji mysql_connect()
- Dla pierwszego połączenia: mysql_connect(‘locahost1′, ‘user’, ‘pass’, false);
- Dla drugiego i kolejnych połączeń: mysql_connect(‘locahost2′, ‘user’, ‘pass’, true);
Użycie “true” w drugim wywołaniu funkcji powoduje utworzenie nowego połączenia!

PRZYKŁAD 2:
Poniżej rozbudowana funkcja w PHP którą można wykorzystać do połączenia z bazą lub bazami danych MySQL.
Funkcja:
- umożliwia nawiązanie połączenie z kilkoma hostami danych MySQL,
- podłącza nas do wybranej bazy danych MySQL – dla określonego hosta,
- ustawia wybrane kodowanie w tym przypadku UTF-8 (połączenia, klienta, zwracanych wyników, itp.),
- zwraca odpowiedni komunikat w przypadku niepowodzenia (połączenia, ustawienia bazy, ustawienia odpowiedniego kodowania),
- zwraca uchwyt połączenia,
- idealnie nadaje się do developerki, zawsze wiemy gdy coś poszło nie tak!

<?PHP
function connect_to_db($host, $user, $pass, $db, $link) {
        if(!($con = @mysql_connect($host, $user, $pass, $link))) {
                echo “ERROR MySQL: Connect to Server\n”;
                exit;
        }
        if(!mysql_select_db($db, $con)) {
                echo “ERROR MySQL: Connect to DataBase\n”;
                exit;
        }
        if(!mysql_query(“SET NAMES ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET NAMES ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET CHARACTER SET ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET CHARACTER SET ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_client = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_client = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_results = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_results = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_connection = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_connection = ‘utf8′\n”;
                exit;
        }
        mb_internal_encoding(“UTF-8″);
        mb_regex_encoding(“UTF-8″);
        return $con;
}
// Tworzymy pierwsze połączenie z bazą danych MySQL na hoście locahost1
$con1 = connect_to_db(‘locahost1′, ‘user’, ‘pass’, ‘db’, false);
// Tworzymy drugie połączenie z bazą danych MySQL na hoście locahost2
$con2 = connect_to_db(‘locahost2′, ‘user’, ‘pass’, ‘db’, true);
// Tworzymy trzecie połączenie z bazą danych MySQL na hoście locahost3
$con3 = connect_to_db(‘locahost3′, ‘user’, ‘pass’, ‘db’, true);
// [...]
// zamykamy połączenia z bazami danych – opcjonalnie
mysql_close($con1);
mysql_close($con2);
mysql_close($con3);
?>

Posted in MySQL, PHP | Tagged , , , , , , , , , , , , , , , | Leave a comment

PHP MySQL How to connect to the MySQL database server?

The connection to the MySQL database, we can accomplish a number of ways – like most things in PHP.
It may be:
- Normal call declared in PHP,
- More complex function of the task will be to connect to the database,
- Defined in a separate file that you attach to the performance of the code (function include, or require).
- Etc.

Below I will present several ways to connect to a MySQL database.

NOTE:
The following examples show how to connect to a MySQL database (this is the default way in php).
If you want to create a connection with two or more MySQL databases at the same time, I invite you to a separate article.

EXAMPLE 1:
Simple PHP code that creates direct connection to a MySQL database

<?php
// 1. At the beginning we create a connection to the host the MySQL database.
$host = ‘locahost’;
$user = ‘user’;
$pass = ‘pass’;
$con = @mysql_connect($host, $user, $pass);
if(!$con) {
        echo “ERROR MySQL: Connect to Server\n”;
        exit;
}
// 2. Connect to the specified database.
$db = ‘baza_danych_MySQL’;
@mysql_select_db($db, $con);
// 3. At the end of the close connection to the MySQL database – optional.
mysql_close($con);
?>

NOTES:
1. Using the @ sign (monkeys) the functions, this causes the error does not appear in the event of failure of implementation functions.
In this case, the function mysql_connect could display an error if the host such a database was unreachable, and the function mysql_select_db () wyświetliłaby error if unable to connect to a specific database.
Using @ mysql_connect () instead of mysql_connect () fails to display unwanted messages.

2. In the mysql_select_db function, we used the call to the current connection $ con: mysql_select_db ($ db, $ con);
But the second argument is unnecessary, we can simply use the mysql_select_db ($ db);

EXAMPLE 2:
The following PHP code in a more sophisticated functions to connect to the MySQL database.
Function:
- Connects to host the MySQL database,
- Connects us to the selected MySQL database,
- Sets the encoding selected in this case UTF-8 (call, client, results returned, etc.)
- Returns the appropriate message in case of failure (connection, database setup, setting the correct encoding)
- Returns the connection handle,
- Ideal for developerki, we always know when something has gone wrong!

<?php
function connect_to_db($host, $user, $pass, $db) {
        if(!($con = @mysql_connect($host, $user, $pass))) {
                echo “ERROR MySQL: Connect to Server\n”;
                exit;
        }
        if(!mysql_select_db($db, $con)) {
                echo “ERROR MySQL: Connect to DataBase\n”;
                exit;
        }
        if(!mysql_query(“SET NAMES ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET NAMES ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET CHARACTER SET ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET CHARACTER SET ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_client = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_client = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_results = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_results = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_connection = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_connection = ‘utf8′\n”;
                exit;
        }
        mb_internal_encoding(“UTF-8″);
        mb_regex_encoding(“UTF-8″);
        return $con;
}
// Call a function call to the MySQL database
$con = connect_to_db(‘locahost’, ‘user’, ‘pass’, ‘db’);
// [...]
// Close connection to the database – optional
mysql_close($con);
?>

Posted in MySQL, PHP | Tagged , , , , , , , , , , | Leave a comment

PHP MySQL Jak połączyć się z serwerem bazy danych MySQL?

Połączenie z bazą danych MySQL możemy zrealizować na kilka sposobów – jak większość rzeczy w PHP.
Może to być:
- zwykłe połączenie deklarowane w kodzie PHP,
- bardziej rozbudowana funkcja której zadaniem będzie połączenie z bazą danych,
- zdefiniowane w osobnym pliku który dołączamy do wykonywanego kodu (funkcja include, require).
- itd.

Poniżej przedstawię kilka sposobów połączeń z bazą MySQL.

UWAGA:
Poniższe przykłady przedstawiają sposób połączenia się z jedną bazą danych MySQL (jest to domyślny sposób w php).
Jeżeli chcecie utworzyć połączenie z dwoma, albo kilkoma bazami danych MySQL jednocześnie, zapraszam do odrębnego artykułu (podłączenie się do kilku baz MySQL jednocześnie).

PRZYKŁAD 1:
Prosty kod PHP tworzący bezpośrednio połączenie z bazą danych MySQL

<?php
// 1. Na początek tworzymy połączenie z hostem bazy danych MySQL.
$host = ‘locahost’;
$user = ‘user’;
$pass = ‘pass’;
$con = @mysql_connect($host, $user, $pass);
if(!$con) {
        echo “ERROR MySQL: Connect to Server\n”;
        exit;
}
// 2. Podłączamy się do określonej bazy danych.
$db = ‘baza_danych_MySQL’;
@mysql_select_db($db, $con);
// 3. Na koniec zamykamy połączenie z bazą danych MySQL.
mysql_close($con);
?>

WYJAŚNIENIA:
1. Użycie znaku @ (małpy) przed funkcjami powoduje to, iż nie zostanie wyświetlony błąd w przypadku niepowodzenia wykonania funkcji.
W tym przypadku, funkcja mysql_connect, mogłaby wyświetlić błąd gdyby np. host z bazą danych był nieosiągalny, a funkcja mysql_select_db() wyświetliłaby błąd gdyby nie mogła nawiązać połączenia z określoną bazą danych.
Użycie @mysql_connect() zamiast mysql_connect(), zaniecha wyświetlenie niepotrzebnych komunikatów.

2. W funkcji mysql_select_db, użyliśmy wywołania z aktualnym połączeniem $con: mysql_select_db($db, $con);
Jednak drugi argument jest zbędny możemy użyć po prostu mysql_select_db($db);

PRZYKŁAD 2:
Poniżej kod PHP bardziej rozbudowanej funkcji do połączenia z bazą danych MySQL.
Funkcja:
- nawiązuje połączenie z hostem bazy danych MySQL,
- podłącza nas do wybranej bazy danych MySQL,
- ustawia wybrane kodowanie w tym przypadku UTF-8 (połączenia, klienta, zwracanych wyników, itp.),
- zwraca odpowiedni komunikat w przypadku niepowodzenia (połączenia, ustawienia bazy, ustawienia odpowiedniego kodowania),
- zwraca uchwyt połączenia,
- idealnie nadaje się do developerki, zawsze wiemy gdy coś poszło nie tak!

<?php
function connect_to_db($host, $user, $pass, $db) {
        if(!($con = @mysql_connect($host, $user, $pass))) {
                echo “ERROR MySQL: Connect to Server\n”;
                exit;
        }
        if(!mysql_select_db($db, $con)) {
                echo “ERROR MySQL: Connect to DataBase\n”;
                exit;
        }
        if(!mysql_query(“SET NAMES ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET NAMES ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET CHARACTER SET ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET CHARACTER SET ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_client = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_client = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_results = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_results = ‘utf8′\n”;
                exit;
        }
        if(!mysql_query(“SET character_set_connection = ‘utf8′”, $con)) {
                echo “ERROR MySQL: SET character_set_connection = ‘utf8′\n”;
                exit;
        }
        mb_internal_encoding(“UTF-8″);
        mb_regex_encoding(“UTF-8″);
        return $con;
}
// wywołujemy funkcję połączenia z bazą danych MySQL
$con = connect_to_db(‘locahost’, ‘user’, ‘pass’, ‘db’);
// [...]
// zamykamy połączenie z bazą danych – opcjonalnie
mysql_close($con);
?>

Posted in MySQL, PHP | Tagged , , , , , , , , , , | Leave a comment

PHP MySQL. Ilość zmodyfikowanych rekordów, UPDATE, mysql_affected_rows()

UPDATE – to często wykonywane polecenie w bazach danych takich jak np. MySQL. Czasami zachodzi potrzeba sprawdzenia ile rekordów zostało zmodyfikowanych przy wykonywaniu polecenia update.

W PHP do tego celu służy funkcja mysql_affected_rows();

Funkcja ta pobiera ilość rekordów które zostały zmodyfikowane podczas wykonywania ostatniego polecenie UPDATE.
Ostatniego – tzn., że należy ją użyć bezpośrednio za wykonywanym poleceniem UPDATE.

Przykład:

<?php
// Połączenie z hostem z MySQL
if( ($con = mysql_connect(‘mysql_host’,'mysql_user’,'mysql_password’))===false) {
die(‘Error: Connect to mysql: ‘.mysql_error());
exit;
}
mysql_select_db(‘mysql_db’);
// UPDATE rekordów w bazie MySQL
mysql_query(“UPDATE mysql_table SET mysql_col=123 WHERE id_mysql_table >  123″);
$ilosc_update = mysql_affected_rows();
echo “Podczas polecenie UPDATE, zostało zmodyfikowanych rekordów: “.$ilosc_update;
?>

Posted in MySQL, PHP | Tagged , , , , , , | Leave a comment