Połączenie z jedną i dwiema bazami jednocz...
R1d4r
21.08.2015
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 ); ?>
G[o]Q
31.08.2015
juz chyba nie powinno sie pisać poradników o mysql_*
a sprawdziłeś co się wyswietli np dla róznych id w zapytaniach?
dasiek
01.09.2015
$connectTWO$zapytanieza Polsko-Angielski kod powinno sie wieszac
tak samo jak za korzystanie z PHP :&
R1d4r
01.09.2015
juz chyba nie powinno sie pisać poradników o mysql_*
a sprawdziłeś co się wyswietli np dla róznych id w zapytaniach?
Nie, pisałem od tak przy tworzeniu serwera. A pisałem to dlatego, że nie było to opisane. Nie wszędzie można znaleźć informacje o tym, a dla nowych może się przyda.
$connectTWO
$zapytanie
za Polsko-Angielski kod powinno sie wieszac
A tam. Mi się wydaje że jest to lepiej, bardziej widoczne wtedy dla osób, które mają pierwszy raz z tym do czynienia. Myślałem nad tym i tak się rzuca w oczy.
tak samo jak za korzystanie z PHP :&
Korzystanie z PHP jest dobre, bo bez tego statystyki web by nie powstały. AmxBans'a by nie było i co za tym idzie trudniej zbanować takich uciekinierów czy też odbanowywać(tak, można też z konsoli serwera). :&
Ogen Dogen
02.09.2015
Z tego co wiem to ta podstawowa biblioteka mysql_* jest "deprecated", ostatni raz to używałem mysqli.
tak samo jak za korzystanie z PHP :&
Jakaś alternatywa dla PHP ?
plx211
02.09.2015
Python, ruby, perl, c# (i cala rodzina asp), java, c++ (cppcms)
Jak jestes uparty to asm (najprostsza skladnia )
@edit
Erlang, go lang i kazdy inny jezyk programowania ktory pozwala na vos eiecej niz maszyna turinga
Edited by plx211, 02.09.2015 15:33.
Puchate
03.09.2015
Użyj chociaż mysqli, niekoniecznie wersji obiektowej. Jaki jest sens łączenia się z dwiema bazami danych naraz? Dodatkowo jak otwierasz połączenie z MySQL to jeszcze wypada abyś je zamknął.
<?php $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { echo "Error: Unable to connect to MySQL." . PHP_EOL; echo "Debugging errno: " . mysqli_connect_errno() . PHP_EOL; echo "Debugging error: " . mysqli_connect_error() . PHP_EOL; exit; } echo "Success: A proper connection to MySQL was made! The my_db database is great." . PHP_EOL; echo "Host information: " . mysqli_get_host_info($link) . PHP_EOL; mysqli_close($link); ?>
Jakaś alternatywa dla PHP ?
A po co? PHP jest dobrym językiem, głównie ze względu na swoją popularność
Edited by Puchate, 03.09.2015 12:21.