Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z nową wersją MariaDB
gloweres
post
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 29.08.2020

Ostrzeżenie: (0%)
-----


Dzień dobry wszystkimi.
Na hostingu którego używam od uzywałem MariaDB 10.1 lecz za niedługo wersja ta zostanie wyłączona i jedyną opcją jest MariaDB 10.5.
Na MariaDB 10.1 wszystko mi działało super lecz gdy zmieniam wersję na 10.5. to nie działa mi w ogóle wysyłanie informacji do bazy danych. Nie mogę edytować danych, wgrywać plików, dodawać danych.
Poniżej jest kod jaki używam na stronie do dodawania informacji do kolumn w tabeli. Bardzo proszę o pomoc co robię nie tak.

Plik dbsoft.php:

  1. <?php
  2. $dsn = 'mysql:host=XXXXXX;dbname=XXXXXX;charset=utf8';
  3. $username = 'XXXXXX';
  4. $password = 'XXXXXX';
  5. $options = [];
  6. try {
  7. $connection = new PDO($dsn, $username, $password, $options);
  8. } catch(PDOException $e) {
  9.  
  10. }
  11. ?>

Kod dodawania imienia i nazwiksa do bazy. VALUES ('{$_POST['1']}', '{$_POST['2']}')"; wczytuje z innej podstrony.
  1. <?php
  2.  
  3. require '../funkcje/database_connect/dbsoft.php';
  4.  
  5. $sql = "INSERT INTO `database` (nazwisko, imie)
  6. VALUES ('{$_POST['1']}', '{$_POST['2']}')";
  7.  
  8. $statement = $connection->prepare($sql);
  9.  
  10. if (!$statement) {
  11. echo "\nPDO::errorInfo():\n";
  12. print_r($dbh->errorInfo());
  13. }
  14.  
  15. if ($statement->execute()) {
  16.  
  17. echo '<p class="text-success">Pozytywnie dodano osobę</p>';
  18.  
  19. }
  20.  
  21. ?>


Błąd jaki zwraca strona:

  1. Fatal error: Uncaught Error: Call to a member function prepare() on null in /home/server100024/ftp/skb/pliki/cos.php:8 Stack trace: #0 {main} thrown in /home/server100024/ftp/skb/pliki/cos.php on line 8


Ten post edytował gloweres 6.09.2020, 01:10:08
Go to the top of the page
+Quote Post
viking
post
Post #2





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Problem masz w połączeniu. W linii 9 pierwszego kodu dodaj echo $e->getMessage();


--------------------
Go to the top of the page
+Quote Post
gloweres
post
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 29.08.2020

Ostrzeżenie: (0%)
-----


Błąd był spowodowany złym linkiem do bazy. Lecz teraz gdy to poprawiłem wyświetla się białą strona i nic sie nie dodaje do bazy. Gdy tylko zmieniam na wersje 10.4 wszystko działa jak trzeba lecz za tydzień nie będzie ona już dostępne więc muszę przejść na wersję 10.5.

Ten post edytował gloweres 6.09.2020, 01:41:36
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Biała strona to jakiś błąd 500. Sprawdź logi. Po co robisz prepare w którym na sztywno wkładasz post?


--------------------
Go to the top of the page
+Quote Post
gloweres
post
Post #5





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 29.08.2020

Ostrzeżenie: (0%)
-----


Nie ma żadnego błędu w logach, wszędzie status 200, więc wszystk dobrze. Połączenie z bazą na pewno jest dobre bo wyświetlają się informację pobierane z bazy lecz nie działa własnie wysyłanie, zmienianie od stronki. Wszystko działa jak trzeba na wersji 10.1-10.4 lecz na 10.5 właśnie są te problemy. Ktoś wie jaki może być problem?
Go to the top of the page
+Quote Post
viking
post
Post #6





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A jakie logi konkretnie sprawdzasz? Włącz pełne raportowanie błędów (przyklejony temat).


--------------------
Go to the top of the page
+Quote Post
gloweres
post
Post #7





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 29.08.2020

Ostrzeżenie: (0%)
-----


Znalazłem błąd, w nowej wersji mardiaDB pustych pól nie zamienia automatycznie na null w bazie. Trzeba nadać im jaką kolwiek wartość (chodzi np o date lub int). Wie może ktoś jak do tego kodu zaimplementować poprawnie:

  1. $pole1 = (!empty($_POST['cos1'])) ? $_POST['cos1'] : null;

Żeby np jak dodaje wartość int albo date automatycznie dawało do bazy 0 lub null? Bo problem dotyczył jak chciałem zostawić puste pole w int lub date (w poprzednich wersjach mariadb nie było tego problemu bo baza sama dawała date 0000-00-00 lub int 0 jak pole było puste.

Ten post edytował gloweres 6.09.2020, 13:57:33
Go to the top of the page
+Quote Post
viking
post
Post #8





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


A dlaczego nie ustawisz w bazie wartości domyślnych dla pól skoro czegoś oczekujesz domyślnie? Nie było by problemu gdybyś pisał porządnie swój kod.
https://mariadb.com/kb/en/sql-mode/
PS data 0000-00-00 również nie jest poprawna i generuje domyślnie warning.

Ten post edytował viking 6.09.2020, 14:07:58


--------------------
Go to the top of the page
+Quote Post
gloweres
post
Post #9





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 29.08.2020

Ostrzeżenie: (0%)
-----


Jestem początkujący i dopiero się uczę dlatego pewnie takie błędu. Jak powinno to wyglądać w kodzie. Jak zdefiniowałem w bazie wartość pola int na 0 to dalej jest błąd:
SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '' for column `server100024_pliki4`.`database`.`kwota_wpisowego` at row 1
Więc muszę z poziomu kodu to zdefiniować (tego wymaga mariadb w wersji 10.5)
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jeżeli masz ustawione wartości domyślne to je pomijaj podczas insert w zapytaniu. A skoro nie znasz daty to nie może być nullem? No i mam nadzieję że potrawie to dziurawe prepare które pokazałeś na początku. Żadnych danych bezpośrednio w zapytaniu.


--------------------
Go to the top of the page
+Quote Post
gloweres
post
Post #11





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 29.08.2020

Ostrzeżenie: (0%)
-----


Trochę nie rozumiem o co chodzi z tym prepare? Co powinienem poprawić? Czemu jest źle?
Go to the top of the page
+Quote Post
viking
post
Post #12





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Jest źle to że nie podstawiasz w nim żadnych wartości przez placeholder tylko wstrzykujesz dane użytkownika. Podatne na sql injection. Masz przecież w dokumentacji opisane jak używać.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 04:31