php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Scripts > BRAINSTORMING PHP/SQL/HTML/JS/CSS
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


BRAINSTORMING PHP/SQL/HTML/JS/CSS Ihr habt eine Idee, aber keinen genauen Ansatz? Diskutiert mit anderen Usern des Forums über eure Gedankengänge um evtl. hilfreiche Ideen zu bekommen!
Normale Fragen bitte weiterhin in die entsprechenden Foren!

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 27-02-2008, 22:33
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard Abstraktionsschicht für PDO

Moin Leute,

ich beschäftige mich seit einigen Tagen mit der Objektorientierten Programmierung. Dabei bin ich dann irgendwie auf PDO gestoßen, und finde das ist eigentlich eine ganz feine Sache. Vielleicht hat der ein odere andere von euch das ja in dem anderen Thread mitbekommen.

Als erstes Projekt dachte ich mir, ich bastel eine kleine Abstraktionsschicht für PDO ( Ja, in dem anderen Thread wurde da was gepostet, das habe ich aber nicht vollständig begriffen, darum wollte ich mir selber etwas schreiben. )

Zuerst dachte ich mir: Was soll das Ding eigentlich leisten ?
  • Den Code für spätere Projekte übersichtlich halten ( Einfach nur Query mit ? und dahinter ein Array mit den Werten als Paramter für Queries )
  • Bei SELECT-Anfragen das Ergebnis in einem assoziativen Array zurückgeben.

Der Endbenutzer soll also eigentlich nicht mehr benutzen müssen als das:

PHP-Code:
$db = new MyQuery('localhost''xxx''xxx''verwaltung');
    
$result $db -> doQuery("SELECT name FROM account WHERE name = ?", array('Klaus')); 
Dafür habe ich mir nun folgenden Codeschnippsel gebastelt:

PHP-Code:
<?php

class MyQuery extends PDO{

    public function 
__construct($host$user$password$database){
      
parent::__construct('mysql:host=' $host .';dbname='$database ''
$user$password); 
    }
    
    
    public function 
doQuery($query$data = array()){

        
$stm $this -> prepare $query );
        
        if(
$stm -> execute( (array) $data)){
        
        if (
preg_match ("/^select/i"$query)){
            
$result $stm -> fetchAll(PDO::FETCH_ASSOC);
            return 
$result;
        }
        else{
         return 
true;
        }
        
        
$this -> closeCursor();
        }
         
         }
        
    
    
    
}
?>
Funktioniert soweit auch, sofern die Queries keine Synstax-Fehler haben und alle Tabellen/Spalten existieren. Ich hab mich nun ne Weile durch das Manual gewühlt und irgendwie komm ich mit dem Error-Handling garnicht klar.

Ich möchte gerne eine Exception werfen, die den SQL-Error enthält ( sofern vorhanden ), damit der Benutzer weiß, was er verkehrt gemacht hat.

Ansonsten, hackt bitte auf mir herum, ich bin für jeden Tip, jede Kritik, oder sonstige Äußerung irgendwie dankbar. Ich bin ein Anfänger, und möchte gern was dazulernen.

Greetz,
nohfreak

P.S.: Evtl. gehört der THread auch eher nach Projekthilfe, ich weiß nicht genau. :>

Geändert von nohfreak (27-02-2008 um 22:43 Uhr)
Mit Zitat antworten
  #2 (permalink)  
Alt 27-02-2008, 23:07
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Schau die mal Exceptions und Exceptionhandling an (try { } catch ( ) { }).
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #3 (permalink)  
Alt 27-02-2008, 23:33
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja, das weiß ich. Ich kapier nur nich, wie ich von PDO den SQL-Error rausbekomme. :>
Mit Zitat antworten
  #4 (permalink)  
Alt 27-02-2008, 23:41
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

PHP-Code:
try
{
    
$pdo->do_something_stupid();
}
catch (
PDOException $e)
{
    echo 
$e->getMessage();

?
Mit Zitat antworten
  #5 (permalink)  
Alt 27-02-2008, 23:54
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Danke erstmal für die Antworten.

Habe das nun mal mit der Lösung von Griecherus probiert. Wenn ich nun z.B. im Query ne Tabelle angebe, die nicht existiert, dann kommt nun aber immernoch kein Error. Die Seite bleibt einfach weiß.
Mit Zitat antworten
  #6 (permalink)  
Alt 27-02-2008, 23:57
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Versuch mal folgendes:
PHP-Code:

$pdo 
= new PDO(); //...

$pdo->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION); 
Mit Zitat antworten
  #7 (permalink)  
Alt 28-02-2008, 00:01
nohfreak
 Registrierter Benutzer
Links : Onlinestatus : nohfreak ist offline
Registriert seit: Nov 2007
Beiträge: 160
nohfreak ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ah, super, ich danke dir, genau das wars, was ich wollte!

Und ansonsten ? Noch irgendwelche Tipps für meinen Codeschnippsel ? Ich bin mir z.B. nicht ganz sicher, ob RegEx der beste Weg is um zu checken ob es sich um ein SELECT-Statement handelt. Gibts da evtl. ne bessere Methode, die weniger Rechenintensiv ist ? ( Ist RegEx doch, oder ? ^^ ).

Findet ihr das so sinnvoll, hab ich da was gravierendes falsch/vergessen, oder hat jemand noch Anregungen, was da noch fehlt, bzw. wie oder womit man dasn och erweitern könnte ?
Mit Zitat antworten
  #8 (permalink)  
Alt 28-02-2008, 00:47
Griecherus
 PHP Senior
Links : Onlinestatus : Griecherus ist offline
Registriert seit: May 2005
Ort: Berlin
Beiträge: 1.036
Griecherus ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ich persönlich bin immer ziemlich akribisch bei der Benamung. Bei einer Klasse Query würde ich die Methode, welche die Abfrage ausführt, eher execute nennen, das finde ich intuitiver. Aber das ist geschmackssache und nebensächlich.
PHP-Code:
$query = new Query();
$query->execute(); 
Zur Regex:
Code:
^\s*SELECT\s+
Ist etwas präziser und gibt dir auch das richtige Ergebnis, sollte der Query-String vorm SELECT Leerzeichen enthalten. Eine bessere Methode als Regex fällt mir spontan nicht ein; ich denke das ist OK so.

Ansonsten scheint mir deine doQuery-Methode relativ unflexibel in puncto Ergebnismengen. So gehst du ausschließlich von assoziativen Arrays aus. Eventuell könntest du da ja nochmal nach einer eleganteren Lösung suchen.

Grüße und gute Nacht
Mit Zitat antworten
  #9 (permalink)  
Alt 28-02-2008, 10:23
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
striposltrim$query ), 'select' )===
Ist wahrscheinlich um einiges fixer als die Regex!

Ich würde das aber eher in zwei Methoden trennen. Also einmal query(), die für Select-Statements da ist, und einmal execute(), für insert, update und delete. Vielleicht sogar noch weiter aufgedröselt:
PHP-Code:
// Alle Datensätze zurückgeben
array selectList$query$params=null )
// Ersten Datensatz zurückgeben
array select$query$params=null )
// Erstes Feld im ersten Datensatz zurückgeben
array selectScalar$query$params=null )
// Query ausführen und Resultset zurückgeben
PDOStatement query$query$params=null )
// Insert-Query ausführen und nächste insert-ID zurückgeben
mixed insert$query$params=null )
// Update-Query ausführen und Anzahl betroffener Datensätze zurückgeben
integer update$query$params=null )
// Delete-Query ausführen und Anzahl betroffener Datensätze zurückgeben
integer delete$query$params=null 

Geändert von PHP-Desaster (28-02-2008 um 10:27 Uhr)
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 03:09 Uhr.