Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Single Ton (PHP/MySQL)

Diskussion: Single Ton (PHP/MySQL) im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hallo ! Ich habe eine PHP Datei für die ganzen Verbindungen zwischen PHP und MySQL PHP-Code: class  DBAdmin {  ...

Antwort
Alt 09.09.10, 23:58   #1 (permalink)
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard Single Ton (PHP/MySQL)

Anzeige

Hallo !

Ich habe eine PHP Datei für die ganzen Verbindungen zwischen PHP und MySQL

PHP-Code:
class DBAdmin
    private static 
$instance null;              
    private        
$conn     null;
    
    private function 
__construct(){
    
$this->conn mysql_connect("localhost",USER,PASS);
    if(!
$this->conn){
      
// error message
    
}
    
mysql_select_db(DBMS) or die(mysql_error());
  }    
    public static function 
instance(){
    if(
self::$instance == null){
       
self::$instance = new self;
    }
    return 
self::$instance;
  }

Nun benutze ich z.B. folgendes :

PHP-Code:
      // @File : stock.php
      
$sql ""// irgendwas
      
DBAdmin::instance()->query($sql); 
Jetzt bin ich mir etwas unsicher wie das von PHP umgesetzt wird. Wenn nun z.B. 5 Benutzer gleichzeitig die stock.php aufrufen, wird für jeden Benutzer ein anderer SQL Befehl erstellt. Nun führen 5 Benutzer gleichzeitig :

PHP-Code:
      DBAdmin::instance()->query($sql); 
Muss ich hier auf Transaktionssicherheit achten ? Kann da was passieren ?

Ich weiß, dass ich z.B. bei C/C++ mit Threads aufpassen muss, wenn diese statische Methoden aufrufen. Also mutex setzen etc. Muss ich das in PHP nun auch. Ich will z.B. nicht, dass innerhalb von query() der String von User 1 durch den von User 2 überschrieben wird und User 1 dann etwas falsches ausführt !
Dawen ist offline   Mit Zitat antworten
Alt 10.09.10, 00:23   #2 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 443
Standard

Ob du auf Transaktionssicherheit achten musst, hängt vom Tabellentyp ab, den du verwendest. Bei InnoDB z.B. wird eine Tabelle für Schreibzugriffe explizit gelockt, so dass es nicht zu Race Conditions bei Schreibvorgängen kommen kann.

Edit: Ich hab das mal zu den Webbasierten Sprachen verschoben. Ich denke das passt hier besser.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 10.09.10, 07:44   #3 (permalink)
 
Benutzerbild von b4ck
 
Registriert seit: 13.02.06
b4ck Leistung: Z3
Likes: 1
Standard

ich denke nicht dass das zu einem problem führen wird.

die user selbst laufen ja jeweils in einem komplett eigenen context am webserver und da deine klasse für jeden user eine eigene mysql_connection aufruft glaube ich nicht dass es hier zu irgendwelchen überschreibungen etc. kommen kann.

weiters findet man im web recht viele php klassen die mysql via. singletons ansprechen bei denen es auch zu keinen problemen kommt.
b4ck ist offline   Mit Zitat antworten
Alt 10.09.10, 09:30   #4 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Hallo !

Ja, im Netz gibt es viele Klassen. Aber ich bin etwas vorsichtig, da diese eventuell nur abgetippt wurden und niemand sich Gedanken gemacht hat über das eventuelle Problem.

@bitmuncher :

Danke für das verschieben. DBMS läuft mit innoDB. Das ist alles okay, mir geht es darum ob der Paramter von query() eventuell überschrieben wird.
Dawen ist offline   Mit Zitat antworten
Alt 10.09.10, 12:03   #5 (permalink)
 
Benutzerbild von blue182
 
Registriert seit: 21.08.10
blue182 Leistung: Facit NTK
Likes: 10
Standard

Zitat:
Zitat von Dawen Beitrag anzeigen
Hallo !

Ja, im Netz gibt es viele Klassen. Aber ich bin etwas vorsichtig, da diese eventuell nur abgetippt wurden und niemand sich Gedanken gemacht hat über das eventuelle Problem.

@bitmuncher :

Danke für das verschieben. DBMS läuft mit innoDB. Das ist alles okay, mir geht es darum ob der Paramter von query() eventuell überschrieben wird.
Nein, da kann nicht passieren.
Wie bereits b4ck erwähnte, nutzt jeder Klient seinen eigenen Context.

Was du aber einbauen solltest ist ein Commit. Dieser sollte doch eher Händisch ausgeführt werden. Dadurch kannst du dann bei einer Ausnahme ohne Probleme einen Rollback machen und den Query verwerfen.
blue182 ist offline   Mit Zitat antworten
Alt 10.09.10, 14:17   #6 (permalink)
Themenstarter
 
Registriert seit: 19.08.04
Dawen Leistung: Addierstift
Likes: 1
Standard

Hallo !

Okay, danke ! Dann werde ich dies so nutzen.

Zitat:
Was du aber einbauen solltest ist ein Commit. Dieser sollte doch eher Händisch ausgeführt werden. Dadurch kannst du dann bei einer Ausnahme ohne Probleme einen Rollback machen und den Query verwerfen.
Ist eingebaut in der query()

PHP-Code:
start_transaction
query
if error
   rollback
   
return false
else
   
commit
   
return true 
Ich habe mir extra so eine Klasse gebaut, damit ich die ganze Tipparbeit nicht habe. Danke an alle !
Dawen ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Single Ton (PHP/MySQL)
Themen-Optionen
Ansicht

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 sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61