• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mysql_query verbieten

ky_fr34k

Mitglied
Hallo zusammen,

ich habe in meinem Projekt eine eigene Datenbank-Klasse geschrieben,
die mir die Verbindung auf verschieden DB-Server ermöglicht.

Sämtliche Anfragen an alle DBs sollen nur über meine Datenbank-Klasse erfolgen.

Leider wird, wenn ich mysql_query(...) verwende immer automatisch die letzte Verbindung verwendet.
Das kann unter Umständen sehr katastrophal sein.

Weiß jemand wie ich es verhindern kann, das mysql_query ohne Verbindung-Kennung ausgeführt wird?

Gruß KY
 
Leider wird, wenn ich mysql_query(...) verwende immer automatisch die letzte Verbindung verwendet.
Das kann unter Umständen sehr katastrophal sein.
Suchst du vielleicht mysql_close ? Dann sollte mysql_query nicht mehr gehen, wenn kein mysql_connect aufgebaut wurde.

Mfg
 
Zuletzt bearbeitet:
Suchst du vielleicht mysql_close ? Dann sollte mysql_query nicht mehr gehen, wenn kein mysql_connect aufgebaut wurde
Hi nein, ich will es ja nicht ganz abschalten. Es wird schon noch mysql_query genutz, aber eben nur inerhalb meiner Datenbank-Klasse.

Trotzdem Danke.

garnicht, macht keinen sinn.
Hi, also mit dem garnicht kann ich leben, aber mit dem "mach keine Sinn" nicht. Warum macht des keinen Sinn? Gibts einen anderen Weg so was zu realisieren?

Mal ein Beispiel:
Ich hab ein System das eine System-DB und eine Daten-DB hat.
Die System-DB liegt bei mir auf dem Server und die Daten-DB liegt beim Kunden aufem Server.
Der Kunde kann nun Plugins schreiben, die aber auf keinen Fall auf die System-DB zugreifen dürfen (nur auf die Daten-DB).
Wie kann ich das verhindern?

Gruß KY
 
Ich glaube du hast probleme die OOP kaum kennt... da kannst du deinen kunden ganz einfache schnitstellen für plugins bieten...
und mal ehrlich wenn du deinem kunden eine datenbank zur verfügung stellst dann kann er da auch daten verändern und wenn er das macht dann läuft sein zeuch halt nicht mehr und er muss warten bis du das repariert hast also selbst schuld... kannst dich sogar extra bezahlen lassen fals das passiert ;) und ne neue datenbank aufsetzen sollte in einem solchen system wie du es beschreibst schließlich kein problem sein aber da mit kennst du dich bestimmt selbst aus ;)
 
Hi,

ja ich glaube so langsam, dass ich mich damit anfreunden muss.
Sicherheit scheint bei php nicht ganz so wichtig zu sein. Damit muss mein C# verwöhntes Hirn erst klar kommen.

Vielen Dank an alle die Geantwortet haben.
Wenn doch noch jemanden was einfällt, ich bin für jede Schandtat bereit.

Gruß KY
 
Kann PHP nicht die Verbindung zu mehreren Datenbanken parallel herstellen?
Wenn du OO denkst, sollte dies ja eine Selbstverständlichkeit sein, dass dein DB Modell nur jeweils eine DB Schnittstelle benutzt, ein anderes Modell eine andere
 
Ja kann PHP.
Beim herstellen der Verbindung wird ja immer ein Verbindungsobjekt zurückgegeben.
Die diversen Verbindungsobjekte verwende ich dann in meiner Datenbank-Klasse.
Wenn ich nun auf eine DB zugreifen will, kann ich immer das entsprechende Verbindungsobjekt benutzen. Das funktioniert auch einwandfrei.

Wird nun aber außerhalb meiner Datenbank-Klasse mysql_query(...) aufgerufen, wird immer die letzte Verbindung benutzt. Und genau das möchte ich verhindern!

Gruß KY
 
Wie soll das verhindert werden?
Wenn du die Verbindung nicht als Parameter übergibst, dann greift der Defaultwert und das ist in dem Fall die letzte benutzte Verbindung. Dann musst du vorher eine andere Verbindung benutzen.
 
Du benutzt doch deine Eigene Klasse?

z.B.

new SQL();

SQL::Connect('localhost','root','');
SQL::Query("{QUERY}");
SQL::Fetch();
echo SQL::$wert['hausname'];
SQL::Close();

____

Dann würde die Verbindung für die anderen schließen. Ich mein, dann würde ein:

mysql_query("{QUERY}");

nicht nützen oder? Andernfalls benutzte für die Personen die kein Zugriff drauf haben sollen, doch eine neue Verbindung zu einem anderem Account.
 
Hi,
das hört sich an als ob es funktionieren könnte.

Ich muss nur noch rausfinden wie viel Zeit das auf und abbauen der Verbindung kostet, und ob die Verbindung bei mysql_query(...) automatisch wiederhergestellt wird.

Ich geb Bescheid wenn ich schlauer bin.

Danke, Gruß KY
 
Eine Verbindung schliessen damit kein Fehler erzeugt wird, klingt doch nicht sinnvoll?
Warum öffnet man nicht einfach in jeder Klasse eine Verbindung und nutzt in dieser Klasse die dazugehörige Verbindung, dann gibt es diese Probleme doch nicht.
 
Eine Verbindung schliessen damit kein Fehler erzeugt wird, klingt doch nicht sinnvoll?
Warum öffnet man nicht einfach in jeder Klasse eine Verbindung und nutzt in dieser Klasse die dazugehörige Verbindung, dann gibt es diese Probleme doch nicht.

Hi,
da hast du schon recht, da aber mysql_query(...) Klassenübergreifend arbeitet funktioniert das nicht.

Ich hab mal folgendes Beispiel gemacht.

PHP:
<?php
    class one
    {
        private $db;
        
        public function __construct($server, $user, $password, $datenbank)
        {
            $this->db = mysql_connect($server,$user,$password);
            mysql_select_db($datenbank, $this->db);
        }
        
        public function Query($query)
        {
            $result =  mysql_query($query, $this->db);
            return mysql_fetch_array($result);
        }
    }
    
    class two
    {
        public function Query($query)
        {
            $result =  mysql_query($query);
            return mysql_fetch_array($result);
        }
    }
    
    $one = new One("","","","");
    $erg1 = $one->Query("SHOW TABLES");
    
    $two = new Two();
    $erg2 = $two->Query("SHOW TABLES");
    
    print_r($erg1);
    print_r("<br><br>");
    print_r($erg2);

?>
Eigentlich dürft nur die erste Klasse ein sinnvolles ergebnis liefern.

Bei mir kommt folgendes Ergebnis:
Array ( [0] => *zensiert* )

Array ( [0] => *zensiert* )

Gruß KY
 
Entweder du übergibst der zweiten Klasse einen konkreten DB Handler oder sie erzeugt ebenfalls einen eigenen. Wenn du alles so mischt, dann hast du natürlich schnell Probleme.
 
Die zweite Klasse kann in Wirklichkeit den DB Handler der ersten Klasse benutzen.

Es geht mir eigentlich darum, dass die zweite klasse auch ohne DB Handler auf die Datenbank zugreifen kann und sich so aller Daten "bemächtigen" könnte. Die zweite Klasse sollte eigentlich nur eine einzige Möglichkeit haben auf die DB zu zugreifen, und das ist indem sie die erste Klasse benutzt!

Gruß KY
 
Dann wäre doch das sinnvollste, wenn du der zweiten Klasse, den DB Handler der ersten übergibst und damit die Abfragen machst?
 
Das mache ich auch, aber wenn ich es eben nicht mache funktioniert es trotzdem!
Wenn ich einem Plugin verbieten möchte auf die db zu zugreifen, und ihm keinen db-Handler übergebe kann es trotzdem auf die letzte DB zugreifen, indem es einfach mysql_query(...) ohne db handler aufruft und automatisch die letzte DB nutzt.

Gruß KY
 
Das verstehe ich nicht. Du kannst doch sicher überprüfen, ob die Klasse zwei einen Wert für den DB Handler übergeben bekommen hat oder nicht?
 
Natürlich kann ich das.

Ich möchte aber verhindern, das die Plugins Vollzugriff auf alle DBs haben!
Ein Plugin soll nur dann auf die DB zugreifen können wenn ich ihm einen DB-Handler gebe.
Wenn nicht soll es auch keinen Zugriff haben!

Gruß KY
 
Zurück
Oben