Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung PHP

Wie kann PHP PDO als DB-Abstraktion verwendet werden?

Mitglied: utopia

utopia (Level 1) - Jetzt verbinden

08.03.2010 um 22:03 Uhr, 4700 Aufrufe, 5 Kommentare

Hallo,

ich beschäftige mich gerade mit dem PHP PDO, dass seit v5.1 oder so dabei ist. Eins ist mir dabei aber ziemlich unklar und ich kann auch nichts genaues finden:

Ist PDO wirklich eine Apstraktion des DB-Zugriffs?

Denn, ich gebe die Query ja direkt an, und wenn da so nen MySQL-Zeugs wie LIMIT, AUTO_INCREMENT, ... drin steht, kann ich mir vorstellen, dass das bei Oracle zu einigen Problemen führt?

Oder wird der Inhalt geparst und dann im Fall von Oracle z.b. in eine SEQUENCE übersetzt? Kann ich mir irgend wie nicht vorstellen.

Das selbe gilt ja nicht nur für Oracle. Bei SQLlite gibt es ja - glaube ich zumindest -auch kein Auto_Increment.

Vielleich kann mir jemand weiterhelfen.

Danke
Mitglied: nxclass
09.03.2010 um 08:41 Uhr
... natürlich muss die DB deine SQL Anweisungen und Aggregat Funktionen verstehen können.
Man ist nur so recht flexibel und kann einfach mit einer statischen Klasse auf alle möglichen DB zugreifen.

ein Auszug aus meinem Archiv:
01.
class My_Db 
02.
03.
    private function __construct() { } 
04.
 
05.
    /** 
06.
     * Statische Funktion zur Initialisierung einer Datenbank Verbindung 
07.
08.
     * @param string $sType         Typ der Datenbank (zB: 'sqlite', 'mysql', 'odbc') 
09.
     * @param array $aConfig        Daten für die Verbindung 
10.
     * @return object|bool      ein Datenbankobjekt o. false 
11.
     */ 
12.
    public static function connect($sType, $aConfig) 
13.
14.
        switch (strtolower($sType)) { 
15.
            case 'sqlite': 
16.
                return new My_Db_Sqlite($aConfig['file']); 
17.
                break; 
18.
            case 'odbc': 
19.
                // odbc:DSN=SAMPLE;UID=john;PWD=mypass 
20.
                return new My_Db_Odbc($aConfig['dsn'], $aConfig['uid'], $aConfig['pwd']); 
21.
                break; 
22.
            case 'mysql': 
23.
                // 'mysql:dbname=testdb;host=127.0.0.1', $user, $pass 
24.
                return new My_Db_Mysql($aConfig['host'], $aConfig['user'], $aConfig['pass'], $aConfig['database']); 
25.
                break; 
26.
            default: 
27.
                // 
28.
                return false; 
29.
30.
31.
 
32.
/*  .... */ 
33.
 
34.
35.
 
36.
class My_Db_Sqlite extends My_Db_Default 
37.
38.
    /** 
39.
     * Verbindet /erstellt das PDO Objekt 
40.
41.
     * Beispiele für eine DSN: 
42.
     *  'sqlite:/opt/databases/mydb.sq3' 
43.
     *  'sqlite::memory:' 
44.
45.
     * @param string $sSrc   Pfad und Dateiname zur Datenbank 
46.
     * @return object $this 
47.
     */ 
48.
    public function __construct($sSrc=null) 
49.
50.
        if ($sSrc && defined('PATH_FS_APPLICATION_DATABASE')) { 
51.
            $this->sSrc = PATH_FS_APPLICATION_DATABASE . $sSrc; 
52.
             
53.
            if ( !file_exists($this->sSrc) ) { 
54.
                $this->connect('sqlite:' . $this->sSrc); 
55.
                $this->init(); 
56.
            } else { 
57.
                $this->connect('sqlite:' . $this->sSrc); 
58.
59.
        } else { 
60.
            $this->connect('sqlite::memory:'); 
61.
62.
63.
 
64.
/* ... */ 
65.
 
66.
67.
 
68.
abstract class My_Db_Default 
69.
70.
    protected $oPdo = null; 
71.
     
72.
    protected $sSrc = null; 
73.
 
74.
    /** 
75.
     * Erstellt die Verbindung zur PDO Schnittstelle 
76.
77.
     * @param string $dsn   eine gültige DSN für die PDO Schnittstelle 
78.
     */ 
79.
    protected function connect($sDsn) 
80.
81.
        try { 
82.
            $this->oPdo = new PDO($sDsn); 
83.
        } catch (PDOException $e) { 
84.
            // 
85.
            My_Log::log('Datenbank '.$sDsn.' konnte nicht erstellt werden! - '.$e->getMessage(), My_Log::CRIT); 
86.
87.
88.
 
89.
    protected function init() 
90.
91.
92.
 
93.
    /** 
94.
     * Führt ein SQL Statement /Abfrage aus 
95.
96.
     * @param string $sSql      SQL String 
97.
     * @param array $aParam     [optional] Werte für eine SQL Anweisung 
98.
     * @return object|integer|bool  Result Objekt o. Zeilenanzahl o. false 
99.
     */ 
100.
    public function query($sSql, $aParam=null) 
101.
102.
103.
 
104.
/* ... */ 
105.
     
106.
}
... am meisten gefällt mir das man die Daten für eine SQL Anweisung mit Platzhaltern versehen kann:
01.
INSERT INTO `table` (`wert1`, `wert2`, `wert3`) VALUES (?, ?, ?);
... und man sich nicht mehr um mögl. Injektions kümmern muss.
Bitte warten ..
Mitglied: masterG
10.03.2010 um 19:51 Uhr
PDO ist ehrlich nicht erwegenswert, weil es keine multiquerys kann. Deswegen bin ich eher auf mysqli gut zu sprechen.
Du kannst ja nach belieben dir eigene Klassen bauen die mysqli extenden (so mach ich es meistens je nach Projekt)

Gruß
masterG
Bitte warten ..
Mitglied: nxclass
11.03.2010 um 08:26 Uhr
PDO ist ehrlich nicht erwegenswert, weil es keine multiquerys kann
01.
$aSql = explode(";\n", $sSql); 
02.
// ...
...
Bitte warten ..
Mitglied: utopia
21.03.2010 um 02:48 Uhr
Sorry für die späte antwort.

Ja, aber das ist ja dann doch keine richtige Abstraktion, oder?

Du hast z.b.
01.
INSERT INTO `table` (`wert1`, `wert2`, `wert3`) VALUES (?, ?, ?);
geschrieben. Diese Backticks rund um die Bezeichner sind doch z.B. nur MySQL. Weiter geht das Problem doch z.B. mit den Datentypen.

Ich denke, dass der ansatz ja durch die connectionStrings ja ganz gut ist, aber was nützt mir das, wenn ich z.B. von mysql auf oracle umsteige und trotzdem durch meine ganzen queries gehen muss um die Backticks durch ' auszutauschen (glaube ich, weiß ich aber nicht genau). Oder gibt es da eine möglichkeit?
Bitte warten ..
Mitglied: nxclass
21.03.2010 um 09:20 Uhr
die Bezeichner sind doch z.B. nur MySQL
.. nein - das wird von der PDO Funktion erledigt und funktioniert auch zB mit Sqlite.
Die Folge ist dann natürlich daß diese Abfrage auch jedes mal komplett an die DB gesendet wird. Allerdings gibt es ja bei den meisten DB die Möglichkeit DB-Variablen und -Funktionen zu nutzen. Sowie größere Parameter Mengen über temp. Tabellen auszuführen.
Bitte warten ..
Ähnliche Inhalte
PHP
PHP PDO Problem
gelöst Frage von Tiggr1994PHP1 Kommentar

Hallo zusammen, Ich versuche gerade PHP zu lernen und bisher klappte es recht gut, jetzt habe ich jedoch ein ...

PHP
PHP Dropdown Menü, Werte aus DB
Frage von laladuduPHP3 Kommentare

Hi, ich hoffe jemand versteht mein Problem^^ Folgendes: Ich habe die Tabelle "Geräte" mit Geräte ID (PK) Gerätename raumID ...

Datenbanken
Schnelle Entwicklung für eine PHP, MySQL-DB?
gelöst Frage von 1410640014Datenbanken2 Kommentare

Hallo, würde mir gerne ein paar Anregungen holen, ob es für PHP und MySQL so ne Art Formular- / ...

PHP
Mehrdimensionales Array mit PHP auslesen um es in eine MySql DB zu schreiben
gelöst Frage von IrunGoldsteinPHP2 Kommentare

Hallo Leute, eventuell kann mir jemand hier auf die Sprünge helfen damit. Ich habe ein Mehrdimensionales Array namens $tree ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 1 TagLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 2 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 2 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 2 TagenSicherheit10 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Batch & Shell
Meltdown Microsoft Prüf Script - .zip Datei leider leer
gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

Batch & Shell
Shell-Skript - Syntax error: Unterminated quoted string
Frage von newit1Batch & Shell13 Kommentare

Hallo Ich schreibe ein Skript das eine CSV-Datei in eine mySQL Datenbank schieben soll. Bekomme nach start des Skrips ...

E-Mail
Erfahrungen mit hMailServer gesucht
Frage von it-fraggleE-Mail10 Kommentare

Hallo, meine neue Stelle möchte einen eigenen Mailserver. Ich als Linuxkind war direkt geistig mit Postfix dabei. Leider wollen ...

Entwicklung
VBS: alle PDF-Dateien in einem Ordner gleichzeitig öffnen
gelöst Frage von JuweeeEntwicklung9 Kommentare

Hallo, ich habe in deiner Ordnerstruktur (.\Tagesberichte\xx.18\) mehrere dynamische PDF-Formulare (mit LCD erstellt). Die Berichtsformulare sind im Layout alle ...