Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Code für jede unterstützte Datenbank

PHP und SQL schreiben, die auf allen sechs von Exponential unterstützten Datenbanken funktionieren - SQLite 3 (der Standard), PostgreSQL, MongoDB, MariaDB, Oracle und MySQL - die Treiberklassen, die portablen…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/php-developers/code-for-every-supported-database.md

On this page

This page is a translation. Read the English original

Code für jede unterstützte Datenbank

Diese Seite richtet sich an PHP-Entwickler, deren Code SQL ausführt. Exponential 6.0.x unterstützt sechs Datenbanken, und eine Erweiterung, die für die Community ausgeliefert wird, kann auf jede von ihnen treffen. Die Aussage zur Unterstützung mit Versionen und Einstellungen finden Sie unter Datenbankunterstützung; diese Seite handelt davon, Code zu schreiben, der auf allen funktioniert.

Inhalt

  1. Die sechs Datenbanken und ihre Treiber
  2. Regeln für portables SQL
  3. Die portablen Hilfsfunktionen
  4. Schema: .dba-Dateien, nicht DDL
  5. MongoDB ist anders
  6. Prüfen, welche Datenbank läuft
  7. Über Engines hinweg testen

Die sechs Datenbanken und ihre Treiber

In der Reihenfolge der Präferenz des Projekts:

DatenbankDatabaseImplementationTreiberklassePHP-Erweiterung
1. SQLite 3 (der Standard des Installers)sqlite3eZSQLite3DBsqlite3
2. PostgreSQLezpostgresqleZPostgreSQLDBpgsql
3. MongoDBmongodbexpMongoDBmongodb und die Bibliothek mongodb/mongodb
4. MariaDBezmysqlieZMySQLiDBmysqli
5. OracleezoracleeZOracleDB (Erweiterung ezoracle)oci8
6. MySQLezmysqlieZMySQLiDBmysqli

Microsoft SQL Server ist mit zusätzlichem Aufwand möglich (Datenbankunterstützung).

Regeln für portables SQL

Tun SieVermeiden Sie
Tabellen- und Spaltennamen in Kleinbuchstaben, ohne Anführungszeichen (acme_report_item)reservierte Wörter, gemischte Schreibung, Anführung mit Backticks
arrayQuery( $sql, array( 'limit' => 20, 'offset' => 40 ) )LIMIT 40, 20 im SQL
Standard-Joins und WHERE-KlauselnUPDATE ... JOIN (SQLite braucht 3.33 und eine Umschreibung; der Treiber schreibt die des Kernels selbst um)
Ganzzahlen für Zeitstempel (time())Engine-spezifische Datumstypen und -funktionen
die Hilfsfunktionen unten für Strings und Bitsvon Hand geschriebenes CONCAT(), SUBSTRING(), &
kurze Transaktionenlang laufende Schreibvorgänge (SQLite erlaubt jeweils nur einen Schreiber)
utf8mb4 bei MariaDB und MySQLutf8 (drei Bytes), das Zeichen außerhalb der Basic Multilingual Plane verliert

Die portablen Hilfsfunktionen

eZDBInterface bietet Funktionen, die jeder Treiber in seinem eigenen Dialekt schreibt:

HilfsfunktionLiefert
$db->concatString( array( 'a', "'-'", 'b' ) )String-Verkettung
$db->subString( 'title', 1, 10 )einen Teilstring-Ausdruck
$db->md5( 'title' )einen MD5-Ausdruck
$db->bitAnd( 'flags', 4 )einen Ausdruck für bitweises UND
$db->generateSQLINStatement( $ids, 'id', false, true, 'int' )eine IN-Liste mit gecasteten Werten
$db->escapeString( $value )die String-Maskierung des Treibers
$db->databaseServerVersion()die Serverversion, wenn Sie verzweigen müssen

Nach der Klasse des Treibers zu verzweigen ist das letzte Mittel; bevorzugen Sie eine Hilfsfunktion, oder verlagern Sie die Abfrage in eZPersistentObject.

Schema: .dba-Dateien, nicht DDL

Liefern Sie keine CREATE TABLE-Anweisungen für eine einzelne Engine aus. Beschreiben Sie Ihre Tabellen einmal in einer .dba-Schemadatei im share/ der Erweiterung und lassen Sie den Schema-Handler (lib/ezdbschema/) die DDL für jede Engine erzeugen; das Schema des Kernels selbst liegt auf dieselbe Weise vor, mit SQL je Engine in kernel/sql/. Update-Skripte je Engine liegen in update/database/sqlite/, postgresql/ und mysql/ (Datenbankschema und .dba-Dateien).

MongoDB ist anders

Der MongoDB-Adapter expMongoDB (seit 6.0.14) führt niemals echtes SQL aus. Er übersetzt die SQL-förmigen Aufrufe des Kernels in Operationen find, aggregate, Insert, Upsert und Delete:

  • Handgeschriebenes SQL, das er nicht übersetzen kann, liefert ein leeres Ergebnis und protokolliert eine Warnung; durchsuchen Sie die Logs nach MONGO TODO. Erweiterungen mit eigenem SQL brauchen möglicherweise einen MongoDB-Pfad.
  • Der Adapter braucht PHP 8.2 oder neuer; der Rest des Kernels läuft unter 8.0.
  • Der SQL-Abfrage-Cache gilt nicht.
  • Es gibt keine SQL-Update-Dateien; die Upgrade-Prüfung vergleicht Collections.

Code, der eZPersistentObject und die Content-API verwendet, funktioniert weit öfter ohne Änderungen als handgeschriebenes SQL (MongoDB als Datenbank, Referenz zur MongoDB-Portierung).

Prüfen, welche Datenbank läuft

$db = eZDB::instance();
$name = $db->databaseName();    // 'sqlite', 'postgresql', 'mongo', 'mysql' or 'oracle'

MariaDB und MySQL antworten beide mit mysql, weil sie sich den Treiber teilen. Auf der Kommandozeile:

php bin/php/console exp:ini get site.ini/DatabaseSettings/DatabaseImplementation

In der Administration hat Setup > Systeminformationen eine Karte Datenbank (Datenbankunterstützung).

Über Engines hinweg testen

EngineWie Sie Ihren Code testen
SQLitedie Standardinstallation; Ihr Entwicklungsrechner
PostgreSQL, MySQLtests/runtests.php --dsn ... --db-per-test, wie die CI (Datenbank- und Live-Tests)
MariaDBdurch den MySQL-Treiber abgedeckt; testen Sie auf MariaDB, wenn Ihr SQL ungewöhnlich ist
MongoDBeine Installation mit --db=mongodb; lesen Sie die Logs nach MONGO TODO
Oracleeine Installation mit der Erweiterung ezoracle

Testen Sie mindestens auf SQLite und auf einer Server-Datenbank, bevor Sie ein Release veröffentlichen.

Verwandte Seiten

Werden Sie Exponential-Partner

Partner teilen ihre Informationen, stellen Mittel bereit, geben Beiträge zurück und entwickeln die Produkte mit uns, und so wächst Exponential. Eine Partner-Website und ein Dashboard sind für Mitte 2027 geplant: Werden Sie noch heute Partner, damit wir schneller wachsen und neue Funktionen früher liefern.

Something wrong on this page? Report an error

Documentation license

This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.

Exponential Copyright © 1998-2026 Exponential Foundation and 7x