Wątek przeniesiony 2020-09-06 12:30 z Bazy danych przez Patryk27.

Błędy przy update na mariadb 10.5 (na 10.1-10.4 wszystko działa) pilna pomoc

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:

<?php
	$dsn = 'mysql:host=XXXXXX;dbname=XXXXXX;charset=utf8';
	$username = 'XXXXXX';
	$password = 'XXXXXX';
	$options = [];
	try {
	$connection = new PDO($dsn, $username, $password, $options);
	} catch(PDOException $e) {
 
	}
?>

Kod dodawania imienia i nazwiksa do bazy. VALUES ('{$_POST['1']}', '{$_POST['2']}')"; wczytuje z innej podstrony.

<?php
 
	require '../funkcje/database_connect/dbsoft.php';
 
	$sql = "INSERT INTO `database` (nazwisko, imie) 
	VALUES ('{$_POST['1']}', '{$_POST['2']}')";
 
	$statement = $connection->prepare($sql);
 
	if (!$statement) {
		echo "\nPDO::errorInfo():\n";
		print_r($dbh->errorInfo());
	}
 
	if ($statement->execute()) {
 
		echo '<p class="text-success">Pozytywnie dodano osobę</p>';
 
	}
 
?>

Dodatkowo dodam, że w logach hostingu nie wyświetla się błąd żaden, na stronie w miejscu gdzie powinna pojawić się informacja "Pozytywnie dodano osobę" nic się nie wyświetla (nawet błąd) a dodatko jak sprawdzam to samo 1:1 w wersji mariaDB 10.1-10.4 wszystko działa tak jak powinno.

0

Przypuszczam, że bardziej pomocne byłoby zamieszczenie tych logów (być może nie wszystko logujesz?), niż kodu który uderza do DB.

Przejrzyj też release notes od wersji 10.4.x z którą wszystko działało, do wersji 10.5.y na którą migrujesz (10.5.5 wygląda na najnowszą).

4

Ja sprawdziłbym porty: czy nowa instancja jest też na standardowym 3306.
Co do kodu to raczej użyj try catch. Przy błędzie połączenia do DB PDO może zwracać "coś" i nigdy nie wejść w ten warunek z wyprinowaniem błędu.
Zresztą zobacz w dokumentacji:
https://www.php.net/manual/en/pdo.construct.php

Edit:
Pisząc z komputera zauważyłem, że pomimo iż łapiesz wyjątek w połączniu to nic z nim nie robisz:

<?php
    $dsn = 'mysql:host=XXXXXX;dbname=XXXXXX;charset=utf8';
    $username = 'XXXXXX';
    $password = 'XXXXXX';
    $options = [];
    try {
    $connection = new PDO($dsn, $username, $password, $options);
    } catch(PDOException $e) {
	//TU Zrób jakiegoś printa etc. np.
	print_r($e->getMessage());

    }
?>
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:

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

Żeby np jak dodaje wartość int albo date automatycznie dawało do bazy 0 lub null?

0
Mateusz Jakubiec napisał(a):

Znalazłem błąd, w nowej wersji mardiaDB pustych pól nie zamienia automatycznie na null w bazie.

To nie miałeś zdefiniowanych domyślnych wartości dla pól, które mogą być puste?

Trzeba nadać im jaką kolwiek wartość (chodzi np o date lub int).

No tak, jeżeli pole nie ma domyślnej wartości, a ty jej nie podasz, to dziwne jest to, że MariaDB kiedyś to przepuszczało i arbitralnie pakowało tam null zamiast się wywalić, a nie że teraz krzyczy o brak tej wartości - tyle, że przez słabą obsługę błędów nie słyszysz tego "krzyku". Generalnie wygląda to na opieranie się na undefined behavior które w końcu się zmieniło :P

Żeby np jak dodaje wartość int albo date automatycznie dawało do bazy 0 lub null?

DEFAULT VALUE zdefiniowane na kolumnie w bazie. Prawie na pewno można dodać też dla istniejących kolumn, przez ALTER TABLE - chyba, że MariaDB jest w tej kwestii niedorobione. Pamiętam, że np. w SQLite niektóre modyfikacje na tabelach wymagały niezłych akrobacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1