Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie
PHP

Połączenie z jedną i dwiema bazami jednocześnie oraz wyświetlanie błędów

php mysql zapytania początki php połączenie php z bazą danych wyświetlanie błędów

  • Nie możesz napisać tematu
  • Zaloguj się, aby dodać odpowiedź
9 odpowiedzi w tym temacie

#1 R1d4r

    Pomocny

  • Użytkownik

Reputacja: 9
Nowy

  • Postów:53
  • Lokalizacja:Polska
Offline

Napisano 21.08.2015 23:58

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`:
baza danych `users`.jpg

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. :D
 

<?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 );
?>

  • +
  • -
  • 2

#2 G[o]Q

    I'm G[o]Q

  • Przyjaciel

Reputacja: 1 344
Godlike

  • Postów:3 563
  • Steam:steam
  • Imię:Krzysiek
  • Lokalizacja:C: / program Files / Valve / Cstrike / G[o]Q.dem
Offline

Napisano 31.08.2015 13:09

juz chyba nie powinno sie pisać poradników o mysql_*

 

a sprawdziłeś co się wyswietli np dla róznych id w zapytaniach?


  • +
  • -
  • 0
Manual ponad wszystko, konsola ponad manual :D :&

Chcesz wysłać do mnie PW ? użyj nazwy GoQ zamiast G[o]Q
Chcesz Kupić moduł płatności via Pukawka,Tserwery, Gamesol, Zabijaka do mojego sklepu? napisz PW cena to tylko 10 zł/sztuka

GG:6022845 (nie pomagam za free osobom ponizej rangi MoD) :D

#3 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 01.09.2015 12:00

$connectTWO 
$zapytanie

za Polsko-Angielski kod powinno sie wieszac


  • +
  • -
  • 0

#4 dasiek

    Nie wiem, nie znam się, nie orientuję się, zarobiony jestem.

  • Junior Admin

Reputacja: 2 077
Godlike

  • Postów:5 706
  • Imię:Adaś
  • Lokalizacja:No teraz trochę dalej od WWy
Offline

Napisano 01.09.2015 13:19

$connectTWO 
$zapytanie

za Polsko-Angielski kod powinno sie wieszac

 

 

tak samo jak za korzystanie z PHP   :&


  • +
  • -
  • 0

#5 R1d4r

    Pomocny

  • Autor tematu
  • Użytkownik

Reputacja: 9
Nowy

  • Postów:53
  • Lokalizacja:Polska
Offline

Napisano 01.09.2015 22:08

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. :D

 

 

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). :&


  • +
  • -
  • -1

#6 Linux'

    Pan Pomocny

  • Power User

Reputacja: 549
Wszechwiedzący

  • Postów:1 501
  • Steam:steam
  • Imię:Sebastian
  • Lokalizacja:AmxMod i SourceMod
Offline

Napisano 02.09.2015 09:33

plus za dobre checi
  • +
  • -
  • 0

b35020692_qesnxqa.png


#7 Ogen Dogen

    Czempion

  • Power User

Reputacja: 261
Wszechwidzący

  • Postów:837
  • GG:
  • Steam:steam
  • Imię:Marcin
  • Lokalizacja:Dąbrowa Górnicza
Offline

Napisano 02.09.2015 13:55

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 ?


  • +
  • -
  • 0

b_350_20_360204_C20008_FFFFFF_000000.png 193.33.176.115:27015

 

94e23d811c.png

 


#8 Oddaj Wiertarke

    Profesjonalista

  • Użytkownik

Reputacja: 74
Pomocny

  • Postów:164
  • Imię:Matico
  • Lokalizacja:Wieś
Offline

Napisano 02.09.2015 14:55

@up Ruby/python etc...


  • +
  • -
  • 0

#9 plx211

    Wszechpomocny

  • Użytkownik

Reputacja: 231
Wszechwidzący

  • Postów:397
  • Lokalizacja:Polska
Offline

Napisano 02.09.2015 15:30

@up x2
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

Użytkownik plx211 edytował ten post 02.09.2015 15:33

  • +
  • -
  • 0

#10 Puchate

    Wszechobecny

  • Użytkownik

Reputacja: 204
Profesjonalista

  • Postów:433
  • Lokalizacja:Polska
Offline

Napisano 03.09.2015 12:18

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ść 


Użytkownik Puchate edytował ten post 03.09.2015 12:21

  • +
  • -
  • 0





Również z jednym lub większą ilością słów kluczowych: php, mysql, zapytania, początki php, połączenie php z bazą danych, wyświetlanie błędów

Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych