Witam,
Można połączyć się z bazą danych za pomocą zdefiniowanych stałych tak jak w tym temacie: Współpraca PHP z MySQL. Ja wytłumaczę, jak prościej i przejrzyściej połączyć się z bazą danych, a potem jak dodawać kolejne połączenia do zupełnie innych baz danych i używanie mysql_query do nich.
Przykładowa tabela w bazie danych o nazwie `users`:
1. Połączenie z jedną bazą danych.
Na początku należy podać dane do połączenia z bazą (ja użyję tutaj zmiennej tablicowej)
<?php /* Dane do polaczenia z MYSQL #1 */ $DBone['host'] = 'localhost'; // Nazwa host (zazwyczaj localhost) $DBone['db'] = ''; // Nazwa bazy danych $DBone['user'] = ''; // login do użytkownika, przez które chcesz łączyć się z bazą danych $DBone['password'] = ''; // Hasło do użytkownika, przez które chcesz łączyć się z bazą danych /* Łączenie się z bazą danych #1 */ $connectONE = @mysql_connect($DBone['host'], $DBone['user'] , $DBone['password']) or die('Brak połączenia z serwerem MySQL #1.<br />Błąd: '.mysql_error()); $db_one = @mysql_select_db($DBone['db'] , $connectONE) or die('Nie mogę połączyć się z bazą danych #1<br />Błąd: '.mysql_error()); ?>
Wyjaśnienie:
$connectONE - zmienna, która ma za zadanie łączyć się z serwerem bazy danych.
$db_one - zmienna, która łączy się z bazą danych wcześniej podanego serwera bazy danych.
Nazwę hosta bazy danych można znaleźć u usługodawcy serwera baz danych. Nie musi być to localhost!
Często później po wczytaniu danych z bazy danych, nie wyświetlają się polskie znaki. Powodem jest tego brak ustawienia formatu danych pobieranych z serwera MySQL. W tym wypadku należy użyć po połączeniu się z bazami danych:
mysql_query("SET NAMES utf8"); mysql_query("SET CHARACTER_SET utf8_unicode_ci");
Tym sposobem wykonujemy zapytanie do bazy danych tak:
$zapytanie = mysql_query("SELECT * FROM users WHERE `id`='1'"); $pierwszy_uzytkownik = mysql_fetch_assoc($zapytanie); echo $pierwszy_uzytkownik['nick'];
Powyższy kod wyświetli nick użytkownika o ID 1. W tym wypadku Metal.
2. Połączenie z dwiema bazą danych.
Nie jest to trude, wystarczy podwoić ten kod z pierwszego i pozmieniać zmienne tak, by nie były takie same. W innym wypadku będziemy się łączyli dwa razy do tej samej bazy danych, a to raczej zbędne. No to lecimy.
<?php /* Dane do polaczenia z MYSQL #1 */ $DBone['host'] = 'localhost'; // Nazwa host (zazwyczaj localhost) $DBone['db'] = ''; // Nazwa bazy danych $DBone['user'] = ''; // login do użytkownika, przez które chcesz łączyć się z bazą danych $DBone['password'] = ''; // Hasło do użytkownika, przez które chcesz łączyć się z bazą danych /* Łączenie się z bazą danych #1 */ $connectONE = @mysql_connect($DBone['host'], $DBone['user'] , $DBone['password']) or die('Brak połączenia z serwerem MySQL #1.<br />Błąd: '.mysql_error()); $db_one = @mysql_select_db($DBone['db'] , $connectONE) or die('Nie mogę połączyć się z bazą danych #1<br />Błąd: '.mysql_error()); /* Dane do polaczenia z MYSQL #2 */ $DBtwo['host'] = 'localhost'; // Nazwa host (zazwyczaj localhost) $DBtwo['db'] = ''; // Nazwa bazy danych $DBtwo['user'] = ''; // login do użytkownika, przez które chcesz łączyć się z bazą danych $DBtwo['password'] = ''; // Hasło do użytkownika, przez które chcesz łączyć się z bazą danych /* Łączenie się z bazą danych #2 */ $connectTWO = @mysql_connect($DBtwo['host'], $DBtwo['user'] , $DBtwo['password']) or die('Brak połączenia z serwerem MySQL #2.<br />Błąd: '.mysql_error()); $db_two = @mysql_select_db($DBtwo['db'] , $connectTWO) or die('Nie mogę połączyć się z bazą danych #2<br />Błąd: '.mysql_error()); ?>
Gdy już to mamy, należałoby spytać, jak wykonać zapytanie, żeby dało się zapisać takie samo dla 2 różnych baz danych. Odpowiedź jest bardzo prosta.
$zapytanie = mysql_query("SELECT * FROM users WHERE `id`='1'", $connectONE); $pierwszy_uzytkownik = mysql_fetch_assoc($zapytanie); echo $pierwszy_uzytkownik['nick']; $zapytanie2 = mysql_query("SELECT * FROM users WHERE `id`='1'", $connectTWO); $pierwszy_uzytkownik2 = mysql_fetch_assoc($zapytanie2); echo $pierwszy_uzytkownik2['nick'];
Załóżmy, że na obu bazach danych jest ta sama tabela users w bazie danych, ten kod wyświetli nam ten sam tekst. Należy pamiętać, że formuła zapytania będzie po prostu taka: mysql_query("TREŚĆ ZAPYTANIA", $ZMIENNA);
$ZMIENNA oznacza tą zmienną, którą ustaliliśmy przy mysql_connect, która posłużyła do połączenia z danym serwerem bazy danych.
3. Zapytania do MySQL:
Wypiszę tu kilka najważniejszych zapytań, ponieważ nie wszyscy nowi mogą je znać.
SELECT * FROM `users` WHERE `nick`='Metal'
To zapytanie wyszuka linię w tablicy o nazwie `users` gdzie `nick` jest równy 'Metal'
UPDATE `users` SET `id`='1' WHERE `nick`='Metal'
To zapytanie zaktualizuję linię na id 1, gdzie nick jest równy 'Metal'.
INSERT INTO `users` SET `id`='1' AND `nick`='Metal' AND `hasło`='jakies_haslo' AND `email`='metal@' AND `lokalizacja`='Polska'
To zapytanie dodaje do bazy danych właśnie tą linię co jest podana na obrazku na samej górze.
4. Wyjaśnienia ogólne:
@ przed funkcjami (np. przy mysql_connect) - oznacza to, żeby użytkownikowi nie wyświetlało się nic o błędach.
echo - polecenie, które ma za zadanie wyświetlić to co jest między " lub zmienną. Na przykład: echo "Jakiś tekst"; wyswietli nam Jakiś tekst.
Tablice zmiennych - jest to jedna zmienna-matka, która posiada wiele swoich dzieci pod danymi index'ami. Używane są po to by ułatwić i usprawnić kod. $zmienna_matka['index'].
mysql_fetch_assoc - jest to polecenie, którego używa się do przypisywania do zmiennych tablicowych danej treści, która jest zawarta w danej linii w bazie danych. Na php.net można znaleźć definicję "Zapisuje wiersz wyniku w tablicy asocjacyjneję". Ja podaję taką, którą pojąć powinni zieloni w tym temacie.
AND - w zapytaniach może być stosowane zamiennie z przecinkiem(",").
5. Wyświetlanie błędów.
Często się zdarza tak, że mamy 10000 linijek kodu, a nie chce poprawnie działać kod. Nie możemy znaleźć błędu - czasem i tak bywa. Z pomocą nam przychodzą dwie linijki kodu, które trzeba dodać na początku pliku. Wyświetli nam on w której linijce jest błąd.
<?PHP ini_set( 'display_errors', 'On' ); error_reporting( E_ALL ); ?>