Błąd z połączeniem bazy MySQL

Błąd z połączeniem bazy MySQL
A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
1

Witam.

Jestem tu nowy, zainteresowało mnie programowanie stron www. Jestem samoukiem w kodowaniu HTML, CSS, JavaScript i php. Próbuje się pobawić z php i MySql ze stworzeniem sobie prostej bazy danych ale tutaj napotykam problem ze zwykłym połączeniem się z bazą MySql z formularza Html i php.

Tworze plik w html formularz i dodatkowo w php sprawdzenie połączenia i za każdym razem albo nic nie ma, albo pokazuje mi cały skrypt php na stronie. Mam włączony Xamp i załączony Apache i MySql, Baza danych też jest utworzona.

Co robię źle?

Kod HTML

Kopiuj
<!DOCTYPE html>
<html lang="pl">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Test połączenia z bazą danych</title>
</head>
<body>
    <h1>Sprawdź połączenie z bazą danych</h1>
    <form action="connection.php" method="post">
        <button type="submit">Testuj połączenie</button>
    </form>
</body>
</html>

Kod PHP (connetion.php)

Kopiuj
<?php
// Parametry połączenia z bazą danych
$host = 'localhost'; // Adres serwera
$username = 'root';  // Domyślny użytkownik MySQL
$password = "";      // Hasło użytkownika MySQL (domyślnie puste)
$dbname = 'test_db'; // Nazwa bazy danych

// Próba połączenia z bazą danych
$conn = new mysqli($host, $username, $password, $dbname);

// Sprawdzenie, czy połączenie się powiodło
if ($conn->connect_error) {
    die("Nie udało się połączyć z bazą danych: " . $conn->connect_error);
}
echo "Połączenie z bazą danych zakończone sukcesem!";
?>

Proszę o pomoc.

edytowany 6x, ostatnio: Riddle
RodionGork
  • Rejestracja:6 miesięcy
  • Ostatnio:4 miesiące
  • Postów:47
0

Adam, cześć!

Jak konkretnie błąd wygladą? co pisze?

dodaj echo $mysqli->connect_errno . "\n"; zaraz po $conn = new mysqli(...).

Ten if powinen sprawdzić errno zamiast error ale nie pamietam czy to koniecznie.


edytowany 2x, ostatnio: RodionGork
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
1

Spróbuj skorzystać z PDO. mysqli ma sporo wad i jest przestarzałe, jest też łatwiej zrobić lukę w bezpieczeństwie, np. przez brak prepared statements. Zamiast tego polecam PDO, które też jest wbudowane w PHP 😉

Kopiuj
<?php

$hostname = "localhost";
$database = "test_db";
$username = 'root';
$password = 'pass';

$pdo = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);

$unbufferedResult = $pdo->query("SELECT 'foo' AS name;");
foreach ($unbufferedResult as $row) {
    echo $row['name'] . PHP_EOL;
}
edytowany 2x, ostatnio: Riddle
Zobacz pozostały 1 komentarz
Riddle
Owszem, jest wbudowane, ale jest też przestarzałe i niezalecane, poza tym ma wiele wad, jak np. brak prepared statements. PDO jest zalecane i łatwe w użyciu.
4w0rX4t4X
przestarzałe i niezalecane skąd ta opinia? Poza rozsiewanymi na ten temat mitami nie ma nigdzie takiej informacji. Ani że jest przestarzałe ani, że jest niezalecane. To, że dla niektórych jest "niemodne" to jedynie opinia. Zarówno PDO jak i mysqli w kolejnych wersjach PHP są tak samo wspierane i póki co nic nie wskazuje by miało być inaczej. Owszem zrezygnowano kiedyś z funkcji mysql_* ale wówczas były ku temu techniczne powody.
axelbest
Mysqli jest przestarzałe i niezalecane. Popieram w 100%. Poza tym wiesz... w php można definiować zmienne $x1, $x2...$x100, a mimo to wygodniej uzyc tablicy prawda? Podobnie funkcja eval(), niby tez mozna uzywac bo jest wbudowana, a jednak zaleca sie jej unikac. Tak samo jest tutaj, to ze jest nie znaczy ze powinno sie uzywac w kazdym przypadku. Tutaj przypadek jest taki, ze lepsze bedzie PDO. Lapka w gore dla @Riddle
4w0rX4t4X
@Riddle: @axelbest - przez kogo jest niezalecane - gdzie to jest napisane a być może to trzeba jakoś czuć? Oficjalna specyfikacja nic na ten temat nie mówi do tego mysqli_ jako następca mysql_ jest nowsze od PDO. https://www.php.net/manual/en/book.mysqli.php. Poza tym MySQLi to zwyczajnie inny rodzaj dostępu do bazy a nie "gorszy czy lepszy". Są rzeczy, które łatwiej i bez kombinowania zrobisz w MySQLi a nie zrobisz w PDO i odwrotnie. Różnice to są zauważalne w szczególności przy optymalizacji wydajnościowej.
4w0rX4t4X
Gdyby mysqli miało być "nie zalecane" to w czasach kiedy wyrzucali z PHP mysql_ nie dali by mysqli a jednak dali i to nie bez powodu. Wrappery na wycofane funkcje i tak trzeba było implementować więc wówczas było całkowicie obojętne czy zrobi się to na PDO czy mysqli a jednak dali to, wciąż wspierają i rozwijają.
A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
0

Kombinowałem to co podaliście i dalej nic nie wychodzi. W chrome po kliknięciu w odnośnik pojawia się biała strona z kodem php.

Destructor
Jeżeli w przeglądarce widzisz kod PHP to znaczy, że masz źle skonfigurowany serwer. Kod powinien zostać zinterpretowany i rezultat powinien być przeglądarce. Co do przyczyn to musiałbyś wkleić pliki konfiguracyjne Apache/Nginx.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
0
Adam85Pń napisał(a):

Kombinowałem to co podaliście i dalej nic nie wychodzi. W chrome po kliknięciu w odnośnik pojawia się biała strona z kodem php.

To najprawdopodobniej baza danych albo się nie uruchomiła, albo nasłuchuje na innym porcie niż domyślny, albo odrzuca połączenie, albo dane dostępowe są niepoprawne, albo ewentualnie Twój skrypt nie może się połączyć z bazą bo albo nie ma dostępu albo jest w innej sieci.

W jaki sposób uruchomiłeś bazę?

A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
0
Riddle napisał(a):
Adam85Pń napisał(a):

Kombinowałem to co podaliście i dalej nic nie wychodzi. W chrome po kliknięciu w odnośnik pojawia się biała strona z kodem php.

To najprawdopodobniej baza danych albo się nie uruchomiła, albo nasłuchuje na innym porcie niż domyślny, albo odrzuca połączenie, albo dane dostępowe są niepoprawne, albo ewentualnie Twój skrypt nie może się połączyć z bazą bo albo nie ma dostępu albo jest w innej sieci.

W jaki sposób uruchomiłeś bazę?

Uruchomiłem w panelu kontrolnym klikając start na Apache i MySql. W database stworzyłem tabela i nic więcej nie grzebałem. A może sprawdzić na innym serwerze lokalnym? (Jak tak to jaki byś polecił?)

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
0
Adam85Pń napisał(a):

Uruchomiłem w panelu kontrolnym klikając start na Apache i MySql. W database stworzyłem tabela i nic więcej nie grzebałem. A może sprawdzić na innym serwerze lokalnym? (Jak tak to jaki byś polecił?)

Jeśli masz dockera, to lokalną bazę danych można postawić jednym poleceniem:

Kopiuj
docker run -e MYSQL_ROOT_PASSWORD=pass -e MYSQL_DATABASE=test_db -p 3306:3306 mysql:5.6

Ja właśnie w taki sposób uruchamiam lokalnie bazy, a sam serwer uruchamiam poleceniem wbudowanym w PHP: php -S localhost:8080, nie potrzebuję Apache ani LAMP/WAMP żeby zacząć tworzyć aplikację.

Wyjaśnienie komendy:

  • docker run polecenie dockera do uruchomienia kontenera (takiej mini-maszyny wirtualnej) z obrazu mysql
  • -e MYSQL_ROOT_PASSWORD=pass, przekazanie umówionej zmiennej środowiskowej do kontenera - obraz jest nauczony stworzyć użytkownika z hasłem z treści tej zmiennej
  • -e MYSQL_DATABASE to samo, tylko z nazwą bazy
  • -p 3306:3306 polecenie dockera, żeby otworzył port 3306 w taki sposób żebyś ze swojego lokalnego komputera mógł się połączyć z serverem mysql w kontenerze przez ten port.
  • mysql:5.6 nazwa obrazu oraz tag z hub.docker.com z obrazem. Tagi najczęściej oznaczają wersję serwera.
edytowany 3x, ostatnio: Riddle
T0
  • Rejestracja:ponad 3 lata
  • Ostatnio:4 minuty
  • Postów:185
2

Tutaj problem raczej będzie po stronie serwera apache nie interpretuje skryptów php musisz w plikach konfiguracyjnych apacha znaleźć opcje, żeby pliki o rozrzerzeniu php uruchamiał.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
1
tomixtomi0001 napisał(a):

Tutaj problem raczej będzie po stronie serwera apache nie interpretuje skryptów php musisz w plikach konfiguracyjnych apacha znaleźć opcje, żeby pliki o rozrzerzeniu php uruchamiał.

Dobry pomysł! 👍 Nie pomyślałem o tym 😄

@Adam85Pń Spróbuj tymczasowo zmienić swój plik na coś takiego:

Kopiuj
<?php
echo "Hello, world!";

// Parametry połączenia z bazą danych
// $host = 'localhost'; // Adres serwera
// $username = 'root';  // Domyślny użytkownik MySQL
// $password = "";      // Hasło użytkownika MySQL (domyślnie puste)
// $dbname = 'test_db'; // Nazwa bazy danych
// 
// Próba połączenia z bazą danych
// $conn = new mysqli($host, $username, $password, $dbname);
// 
// Sprawdzenie, czy połączenie się powiodło
// if ($conn->connect_error) {
//     die("Nie udało się połączyć z bazą danych: " . $conn->connect_error);
// }
// echo "Połączenie z bazą danych zakończone sukcesem!";
?>

I daj znać czy jak odwiedzisz http://localhost/connection.php to czy to widzisz? 🤔

edytowany 1x, ostatnio: Riddle
A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
0
Riddle napisał(a):
tomixtomi0001 napisał(a):

Tutaj problem raczej będzie po stronie serwera apache nie interpretuje skryptów php musisz w plikach konfiguracyjnych apacha znaleźć opcje, żeby pliki o rozrzerzeniu php uruchamiał.

Dobry pomysł! 👍 Nie pomyślałem o tym 😄

@Adam85Pń Spróbuj tymczasowo zmienić swój plik na coś takiego:

Kopiuj
<?php
echo "Hello, world!";

// Parametry połączenia z bazą danych
// $host = 'localhost'; // Adres serwera
// $username = 'root';  // Domyślny użytkownik MySQL
// $password = "";      // Hasło użytkownika MySQL (domyślnie puste)
// $dbname = 'test_db'; // Nazwa bazy danych
// 
// Próba połączenia z bazą danych
// $conn = new mysqli($host, $username, $password, $dbname);
// 
// Sprawdzenie, czy połączenie się powiodło
// if ($conn->connect_error) {
//     die("Nie udało się połączyć z bazą danych: " . $conn->connect_error);
// }
// echo "Połączenie z bazą danych zakończone sukcesem!";
?>

I daj znać czy jak odwiedzisz http://localhost/connection.php to czy to widzisz? 🤔

Zrobiłem tak. Na stronie wyświetliło się sam napis Hello World.

Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
1
Adam85Pń napisał(a):

Zrobiłem tak. Na stronie wyświetliło się sam napis Hello World.

Okay, super! 🥳 Czyli skrypt się włącza, to dobra wiadomość.

Adam85Pń napisał(a):
Riddle napisał(a):

W jaki sposób uruchomiłeś bazę?

Uruchomiłem w panelu kontrolnym klikając start na Apache i MySql. W database stworzyłem tabela i nic więcej nie grzebałem.

Powiedz mi jeszcze, co to za panel kontrolny?

A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
0
Riddle napisał(a):
Adam85Pń napisał(a):

Zrobiłem tak. Na stronie wyświetliło się sam napis Hello World.

Okay, super! 🥳 Czyli skrypt się włącza, to dobra wiadomość.

Adam85Pń napisał(a):
Riddle napisał(a):

W jaki sposób uruchomiłeś bazę?

Uruchomiłem w panelu kontrolnym klikając start na Apache i MySql. W database stworzyłem tabela i nic więcej nie grzebałem.

Powiedz mi jeszcze, co to za panel kontrolny?

Do włączania usług w xampie, nie wiem jak mam to opisać.

Nie wiem, może jak masz chwile czasu to rzucisz okiem na xampa. Bardziej się ogarniesz niż ja.

edytowany 1x, ostatnio: Adam85Pń
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
0
Adam85Pń napisał(a):

Do włączania usług w xampie, nie wiem jak mam to opisać.

Nie wiem, może jak masz chwile czasu to rzucisz okiem na xampa. Bardziej się ogarniesz niż ja.

A koniecznie chcesz używać XAMPP'a?

A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
0
Riddle napisał(a):
Adam85Pń napisał(a):

Do włączania usług w xampie, nie wiem jak mam to opisać.

Nie wiem, może jak masz chwile czasu to rzucisz okiem na xampa. Bardziej się ogarniesz niż ja.

A koniecznie chcesz używać XAMPP'a?

No właśnie szukam na necie jakiegoś innego w miarę łatwego programu który ogarnę z moim małym doświadczeniem żeby się pobawić i nabrać wiedzy w programowaniu. Taki żebym mógł stworzyć baze danych i dodawać tam rekordy i takie tam.

Polecisz coś?

edytowany 1x, ostatnio: Adam85Pń
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 6 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10076
0
Adam85Pń napisał(a):

No właśnie szukam na necie jakiegoś innego w miarę łatwego programu który ogarnę z moim małym doświadczeniem żeby się pobawić i nabrać wiedzy w programowaniu. Taki żebym mógł stworzyć baze danych i dodawać tam rekordy i takie tam.

Polecisz coś?

Mówiłem już - ja korzytam z dockera, to super technologia do korzystania z wielu różnych programów, szybko i łatwo. Można stawiać wiele różnych baz, nawet na raz, usuwać, wyłączać i włączać je bardzo prosto. No ale wymaga to zaznajomienia się z dockerem - co i tak jest plusem, bo to jest super technologia, warto ją znać. Jak się przekaże flagę -d, to można nawet wyłączyć terminal a baza nadal działa.

Alternatywa to po prostu zainstalować samego MySQL'a lokalnie bez XAMPPA, ale tego raczej bym nie polecał, z uwagi na to że korzystanie z bazy z dockerem jest dużo wygodniejsze.

Ja tak dobrze xamppa nie znam, więc nie pomogę z tym co tam nie działa. Pewnie nie postawił bazy odpowiednio, albo baza nasłuchuje na innym porcie.

edytowany 1x, ostatnio: Riddle
A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
0
Riddle napisał(a):
Adam85Pń napisał(a):

No właśnie szukam na necie jakiegoś innego w miarę łatwego programu który ogarnę z moim małym doświadczeniem żeby się pobawić i nabrać wiedzy w programowaniu. Taki żebym mógł stworzyć baze danych i dodawać tam rekordy i takie tam.

Polecisz coś?

Mówiłem już - ja korzytam z dockera, to super technologia do korzystania z wielu różnych programów, szybko i łatwo. Można stawiać wiele różnych baz, nawet na raz, usuwać, wyłączać i włączać je bardzo prosto. No ale wymaga to zaznajomienia się z dockerem - co i tak jest plusem, bo to jest super technologia, warto ją znać. Jak się przekaże flagę -d, to można nawet wyłączyć terminal a baza nadal działa.

Alternatywa to po prostu zainstalować samego MySQL'a lokalnie bez XAMPPA, ale tego raczej bym nie polecał, z uwagi na to że korzystanie z bazy z dockerem jest dużo wygodniejsze.

Ja tak dobrze xamppa nie znam, więc nie pomogę z tym co tam nie działa. Pewnie nie postawił bazy odpowiednio, albo baza nasłuchuje na innym porcie.

Robię to samo ale na WebServ. Test połączenia z bazą danych i wyskakuje biała strona i pokazuje kod php. Nie ogarniam tego. Poczytam na necie może dojdę do tego co jest nie tak.

Dzięki za odpowiedzi.

jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 16 godzin
  • Postów:3500
0

Jeśli w tym kodzie PHP wyświetlonym widzisz znaczniki rozpoczęcia skryptu czyli <?php to kod jednak nie jest Interpretowany. Gdzie umieszczasz ten kod? W jakim katalogu?
Zrezygnuj z tagu zamykającego.kod w pliku.
Plik connection.php możesz przetestować z linii komend czymś takim:

Kopiuj
C:/mój/katalog/PHP.exe connection.php

Oczywiście z katalogu gdzie masz plik do połączenia.
Jeśli zadziała z linii komend to problemu nadal trzeba szukać w konfiguracji xamp/lokalizacji plików.

A8
  • Rejestracja:5 miesięcy
  • Ostatnio:5 miesięcy
  • Postów:8
1
jurek1980 napisał(a):

Jeśli w tym kodzie PHP wyświetlonym widzisz znaczniki rozpoczęcia skryptu czyli <?php to kod jednak nie jest Interpretowany. Gdzie umieszczasz ten kod? W jakim katalogu?
Zrezygnuj z tagu zamykającego.kod w pliku.
Plik connection.php możesz przetestować z linii komend czymś takim:

Kopiuj
C:/mój/katalog/PHP.exe connection.php

Oczywiście z katalogu gdzie masz plik do połączenia.
Jeśli zadziała z linii komend to problemu nadal trzeba szukać w konfiguracji xamp/lokalizacji plików.

Już sobie poradziłem. Kod działa, łączy się z bazą mogę dodawać do bazy rekordy z poziomu html i php. Więc tylko się bawić i nabywać doświadczenia.
Na pewno nie jeden problem jeszcze napotkam więc będę się radził doświadczonych koderów.

jurek1980
Warto jeszcze opisać dla potomnych i AI co finalnie było problemem.
A8
Problem polegał na tym że nie wpisywałem w pasek adresu localhost/index.html, tylko otwierałem plik w przeglądarce z folderu. Teraz za każdym razem wpisuje i działa wszystko.
VBService
Tak, bo cała komunikacja musi się odbywać za pomocą połączenia z serwerem, wtedy serwer przetwarza kod w plikach php.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.