1. Hem
  2. Databaser
  3. Hur testar jag Strict Mode för MariaDB?

Hur testar jag Strict Mode för MariaDB?

Strict Mode för MariaDB (och MySQL) sätter vissa begränsningar på vilka databasfrågor/queries som kan köras och vilken data som kan lagras. Kör du ett system som är egenutvecklat kan det uppstå problem att köra dem på våra servrar om du utvecklat mot en plattform där Strict Mode är avstängt.

Strict Mode är standardinställningen i MariaDB sedan version 10.2.4 och innebär att MariaDB blir striktare i hur den hanterar data. Istället för att tyst justera eller trunkera felaktiga värden returneras ett fel. Genom att ha det aktivt på samtliga servrar förbättrar vi dataintegritet, anpassar oss till en vedertagen standard och säkerställer en enhetlig miljö på alla våra webbhotellservrar. Följande är exempel på vad som kan påverkas:

  1. Ogiltiga datum: Datum som 0000-00-00 eller datum med 00 i månad eller dag accepteras inte längre.
  2. För långa strängar: Strängar som är längre än kolumnen tillåter ger ett fel istället för att trunkeras.
  3. Out-of-range-värden: T.ex. ett tal utanför kolumnens tillåtna intervall ger ett fel istället för att justeras.

De flesta moderna applikationer påverkas inte. Däremot kan äldre, egenutvecklade eller felkonfigurerade applikationer sluta fungera korrekt – typiskt sådana som byggdes innan Strict Mode blev standard för ungefär tio år sedan.

Den här guiden ger ett exempel på hur du kan testa om din kod fungerar. För att göra det, lägg in följande i din PHP-kod där databasuppkopplingen görs (du kan behöva anpassa koden efter din egen applikations kod):

mysqli_query(
$this->dbh,
"SET SESSION sql_mode = '
STRICT_TRANS_TABLES,
NO_ZERO_IN_DATE,
NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,
NO_AUTO_CREATE_USER,
NO_ENGINE_SUBSTITUTION
'"
);

Fungerar allt som förväntat är din kod kompatibel med Strict Mode. Om du får felmeddlanden och andra problem har du två vägar att gå:

  1. Korrigera koden så den följer de standarder som sätts enligt Strict Mode, eller;
  2. Lägg in följande i början av din PHP-kod som kommuncerar med databasen (eller något liknande, baserat på hur din PHP-kod ser ut):
mysqli_query( $this->dbh, "SET SESSION sql_mode=''");

Observera att alternativ 2 ovan enbart bör användas i undantagsfall eller akutsituationer. Det är aldrig en långsiktig lösning att inte rätta sig efter Strict Mode.

Hjälpte den här guiden dig?

Relaterade guider