php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 24-01-2008, 17:29
Stonebreaker62
 Member
Links : Onlinestatus : Stonebreaker62 ist offline
Registriert seit: Apr 2005
Beiträge: 161
Stonebreaker62 ist zur Zeit noch ein unbeschriebenes Blatt
Standard MYSQL: verschachtelte SELECTS

Hallo,

ich nutze in einer Methode verschachtelte SELECTS, d. h. in der WHILE-Schleife zum Auslesen der Sätze der ersten Tabelle mache ich einen SELECT auf eine zweite Tabelle. Hierbei wird ein zweiter Link auf die DB genutzt.

Das Script läuft in meiner localhost Umgebung ohne Probleme, auf meinem Rootserver aber nicht.

Kann das mit unterschiedlichen PHP Versionen zusammenhängen? Der Rootserver war mit PHP 5.2.0 vorinstalliert, lokal nutze ich PHP 5.2.3. Bei SQL gibts auch Unterschiede: lokal ist es 5.0.45 und am Rootserver 5.026
Mit Zitat antworten
  #2 (permalink)  
Alt 24-01-2008, 17:54
krel
 Registrierter Benutzer
Links : Onlinestatus : krel ist offline
Registriert seit: Nov 2006
Ort: Osnabrück
Beiträge: 424
krel ist zur Zeit noch ein unbeschriebenes Blatt
Standard

was heißt es läuft nich? Fehlermeldungen? mysql_error() error_reporting
Mit Zitat antworten
  #3 (permalink)  
Alt 24-01-2008, 17:57
Stonebreaker62
 Member
Links : Onlinestatus : Stonebreaker62 ist offline
Registriert seit: Apr 2005
Beiträge: 161
Stonebreaker62 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hier die Fehlermeldung:

Error!: SQLSTATE[HY000]: General error: 2014 Cannot execute queries
while other unbuffered queries are active. Consider using
PDOStatement::fetchAll(). Alternatively, if your code is only ever going to
run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.
Mit Zitat antworten
  #4 (permalink)  
Alt 24-01-2008, 19:17
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

zeig mal den quelltext dazu oder sollen wir raten was du machst. ich meine vor langer zeit mal was gelesen zu haben, dass du zwei selects nich gleichzeitig ausführen kannst ohne vorher diesen zu schließen


PHP-Code:
->closeCursor(); 
könnte dir evtl weiterhelfen.

mfg
bugbuster


ps: nur vermutung da ich ja nich weiss was du letzendlich machst -> showSource();
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #5 (permalink)  
Alt 24-01-2008, 20:09
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

Das sieht mir nicht nach einem Subselect sondern nach einem weiteren select in einer Schleife aus. Wie die Fehlermeldung schon sagt, musst du erst den einen Resultset abarbeiten bevor du eine weitere Selectanweisung ausführen kannst. Lokal wird PDO::MYSQL_ATTR_USE_BUFFERED_QUERY wohl per default eingeschaltet sein, sonst würd das da nicht laufen.
Mit Zitat antworten
  #6 (permalink)  
Alt 25-01-2008, 01:30
Stonebreaker62
 Member
Links : Onlinestatus : Stonebreaker62 ist offline
Registriert seit: Apr 2005
Beiträge: 161
Stonebreaker62 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hier der Code; ich habe die Methode mal komplett gepostet

PHP-Code:
function untergeordneteTeams($userid) {
    
$dbtyp 'mysql';
    
$dbhost 'localhost';
    
$dbport 3306;
    
$dbname 'bms';
    
$dbuser 'root';
    
$dbpass '';
    
    
$dbh staticpdo :: singleton($dbtyp$dbhost$dbport$dbname$dbuser$dbpass);
    
$dbh->setAttribute(PDO :: ATTR_ERRMODEPDO :: ERRMODE_EXCEPTION);
    
$dbh->exec("SET CHARACTER SET 'utf8' ");
    
$dbh->exec("SET NAMES 'utf8' ");

    
$dbh1 staticpdo :: singleton($dbtyp$dbhost$dbport$dbname$dbuser$dbpass);
    
$dbh1->setAttribute(PDO :: ATTR_ERRMODEPDO :: ERRMODE_EXCEPTION);
    
$dbh1->exec("SET CHARACTER SET 'utf8' ");
    
$dbh1->exec("SET NAMES 'utf8' ");

    
$teams = array ();
    
$abteilungen = array ();
    
$anzahlabteilungen 0;
    try {
        
$count 0;
        
$sql "SELECT AbteilungID FROM abteilungen WHERE Manager=? AND Unternehmen=? ";
        
$stmt $dbh->prepare($sql);
        if (
$stmt->execute(array (
                
$userid,
                
$this->unternehmen
            
))) {
            while (
$row $stmt->fetch()) {
                
$anzahlabteilungen $anzahlabteilungen +1;
                
                
$index $row["AbteilungID"];
                
$abteilungen["$index"] = $row["AbteilungID"];
                
                
$anzahlbeginn 0;
                
$anzahlende 1;
                
$a = new abteilung;
                while (
$anzahlende !== $anzahlbeginn) {
                    
$anzahlbeginn count($abteilungen);
                    
$a->untergeordneteAbteilungen($abteilungen);
                    
$abteilungen $a->getAbteilungen();
                    
$anzahlende count($abteilungen);
                }
                

                foreach (
$abteilungen as $abteilung) {
                    try {
                        
$sql1 "SELECT TeamID FROM teams
 WHERE Unternehmen=? AND UebergeordneteAbteilung=? "
;
                        
$stmt1 $dbh1->prepare($sql1);
                        if (
$stmt->execute(array (
                                
$this->unternehmen,
                                
$abteilung
                            
))) {
                            while (
$row1 $stmt1->fetch()) {
                                
$index $row1["TeamID"];
                                
$teams["$index"] = $row1["TeamID"];
                            }
                        }
                    } catch (
PDOException $e1) {
                        echo 
"<br>Error!: " $e1->getMessage() . "<br/>";
                        echo 
"<br>SQL1 " $sql1;
                        echo 
"<br>Abfrage der Teams-DB in 
untergeordneteTeams fehlgeschlagen<BR>"
;
                        die();
                    }
                }
            }
        }
    } catch (
PDOException $e) {
        echo 
"<br>Error!: " $e->getMessage() . "<br/>";
        echo 
"<br>SQL  " $sql;
        echo 
"<br>Abfrage der abteilungen-tabelle in 
untergeordneteTeams fehlgeschlagen<BR>"
;
        die();
    }

    
// eigenes Team hinzufuegen
    
$index $this->teamid;
    
$teams["$index"] = $this->teamid;

    return 
$teams;
// Ende der Methode 

Geändert von Stonebreaker62 (25-01-2008 um 01:57 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 25-01-2008, 05:52
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Irgendwie bin ich immernoch der Überzeugung:

->closeCursor();


schau dir das mal an:

beispiel


ps: bitte auf die uhrzeit schauen wenn ich was übersehen habe liegts an der unchristlichen uhrzeit

good night
bugbuster
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!

Geändert von Bugbuster (25-01-2008 um 05:56 Uhr)
Mit Zitat antworten
  #8 (permalink)  
Alt 25-01-2008, 08:40
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

Du verwendest wohl $dbh und $dbh1, ich gehe aber mal davon aus, deine Singleton ist so implementiert, das beide auf die gleiche PDO-Instanz verweisen. Wie ich also sagte, du kannst nicht "einfach so" zwei Cursor offen haben. Entweder PDO::MYSQL_ATTR_USE_BUFFERED_QUERY setzen oder die Selects anders verarbeiten. Das würde ich sowieso empfehlen, da Queries innerhalb von Schleifen tödlich werden können!
Mit Zitat antworten
  #9 (permalink)  
Alt 25-01-2008, 14:49
Stonebreaker62
 Member
Links : Onlinestatus : Stonebreaker62 ist offline
Registriert seit: Apr 2005
Beiträge: 161
Stonebreaker62 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Habe die Methode jetzt so umgestaltet, dass ich ohne verschachtelte SELECTS herumkomme und werde in Zukunft auf solche Konstrukte verzichten. Das Werk war ohnehin eines meiner ersten und war sowieso unsinning gestaltet, obwohl es seinen Zweck in lokaler Umgebung erfüllt hat (Für die Verschachtelung gab es eigentlich garkeine Notwendigkeit).

Habe bei der Übertragung auf den Rootserver festgestellt, dass auch andere schlecht bzw. syntaktisch unkorrekt programmierte Methoden nicht mehr funktioniert haben, die lokal keine Probleme gemacht haben. Offensichtlich ist das neuere MySQL Release, das ich lokal benutze, erheblich fehlertoleranter als das, das sich auf dem Rootserver befindet.

Für Eure Hilfe möchte ich mich herzlich bedanken.
Mit Zitat antworten
  #10 (permalink)  
Alt 25-01-2008, 15:13
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OffTopic:

*mir so vor komm als wär ich durchsichtig* hallo kann man mich sehen?




__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #11 (permalink)  
Alt 25-01-2008, 16:11
Stonebreaker62
 Member
Links : Onlinestatus : Stonebreaker62 ist offline
Registriert seit: Apr 2005
Beiträge: 161
Stonebreaker62 ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo bugbuster,

klar kann ich Dich sehen.

Scheinst ne Nachteule zu sein, die noch länger vor der Klotze sitzt als ich.

Hab gesehen, dass ich Mist programmiert hatte und hab das geändert. Deshalb war der Test mit dem closeCursor() nicht mehr erforderlich.

Trotzdem danke für deine Hilfe. Werde den closeCursor() dann einsetzen, wenn ich ihn benötige.
Mit Zitat antworten
  #12 (permalink)  
Alt 25-01-2008, 16:16
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Scheinst ne Nachteule zu sein, die noch länger vor der Klotze sitzt als ich.

Naja eher vor vielen Monitoren und überwachen -> nennt sich Nachtschicht ^^

Zitat:
Hab gesehen, dass ich Mist programmiert hatte
konnte mich da heut morgen nich mehr reinversetzen hab nur gesehen zwei selects und nirgends ein close.

ob man mich sieht war auch mehr als spässle gemeint



mfg
bugbuster
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
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

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

11.10.2018 Berni | Kategorie: PHP/ Anzeigenmarkt
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
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 18:48 Uhr.