php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2010

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 16.02.2010, 12:35  
Erfahrener Benutzer
 
Benutzerbild von litterauspirna
 
Registriert seit: 24.04.2008
Beiträge: 3.172
PHP-Kenntnisse:
Anfänger
litterauspirna sorgt für eine eindrucksvolle Atmosphärelitterauspirna sorgt für eine eindrucksvolle Atmosphäre
litterauspirna eine Nachricht über ICQ schicken
Standard Mysql Klasse macht Probleme in verschachtelten / verzweigten SQL Abfragen

Hallo Leute,

ich habe ein Problem was ich Teils verstehe, aber keine Lösung dafür finde das abzustellen.

Meine kleine Mysql Klasse funktioniert gut, wenn ich keine verzwiegten oder veschachtelten Mysql Query brauche.

Meine Klasse.

PHP-Code:
<?php
/*
*
* mysql verbindungsklasse
*
*/
class Db{
 
 private 
$dbHost;
 private 
$dbUser;
 private 
$dbPw;
 private 
$dbName;
 
 private 
$db_connect null;
 private 
$db_close;
 private 
$db_query;
 private 
$db_fetch;
 private 
$db_num_rows;
 
 
/*
 *
 * constructor
 *
 */
 
public function __construct($dbHost,$dbUser,$dbPw,$dbName){
 
  
$this->dbHost $dbHost;
  
$this->dbUser $dbUser;
  
$this->dbPw $dbPw;
  
$this->dbName $dbName;
 
  
$this->db_connect mysql_connect($this->dbHost,$this->dbUser,$this->dbPw);
 
  if(!
$this->db_connect){
 
   die(
mysql_error().'keine verbindung zur DB'.$this->db_connect); 
  }
 
  
mysql_select_db($this->dbName,$this->db_connect)or die(mysql_error().'keine db gefunden');
 
  
$this->db_query null;
 
  
$this->db_fetch null;
 
  
$this->dbNumRows null;
 }
 
 
/*
 *
 * erstellen des query aufbaus
 *
 */
 
public function DbQuery($query_var){
 
  if(
is_resource($this->db_connect)){
 
   
$this->db_query mysql_query($query_var,$this->db_connect);
  }
 
  if(!
$this->db_query){
 
   die(
mysql_error().' -> Fehler beim ausführen des Mysql Querys!'.$query_var.' <-');
  }
  else{
 
   return 
$this->db_query;
  }
 }
 
 
/*
 *
 * mysql fetch auf assoc ausführen
 *
 */
 
public function DbFetch(){
  if(
is_resource($this->db_connect)){
 
   
$this->db_fetch mysql_fetch_assoc($this->db_query);
 
   return 
$this->db_fetch;
  }
 }
 
 
/*
 *
 * methode für das auslesen von zeilenvorkommen in einer tabelle
 * @param $num_rows
 *
 */
 
public function numRows($numRows){
 
  if(
is_resource($this->db_connect)){
 
   
$this->dbNumRows mysql_num_rows($numRows);
 
   return 
$this->dbNumRows;
  }
  else{
 
   return 
'num rows geht nicht';
  }
 }
 
 
/*
 *
 * datenbank sitzungs vorgang wieder beenden
 *
 */
 
public function __destruct(){
 
  if(
is_resource($this->db_connect)){
 
   
mysql_close($this->db_connect);
  }
 }
}
?>
Und nun ein kurzes beispiel.

PHP-Code:
//instanz auf die maysql klasse
$dbHandling = new Db('host','user','pw','db');
//erstes statement mit while, ich lasse das statement bewuste weg 
//und schildere nur das nötigste, $query wurde gebildet
while($dbDataFetch $dbHandling->DbFetch($query)){
 
       
//2 abfrage die auf erster basiert und hier tritt dann das problem auf
       //2 statement ich begrenze es auf das wichtigste auch hier besteht
       //ein query
       
$dbDataFetch $dbHandling->DbFetch($andererQuery);
 
       
//hier sollen ausgaben aus beiden querys erfolgen
 

Das geschilderte Beispiel funktioniert nicht, es wird einfach nach der Ausgabe des ersten Querys die while Schleife abgebrochen und der Query der 2 Abfrage falsch wiedergegeben.

Wenn ich aber 2 verschiedene Instanzen auf das DB Objekt gebe, dann funktioniert das, auch hier kurzes Beispiel.

PHP-Code:
//instanz auf die maysql klasse
$dbHandling = new Db('host','user','pw','db');
$dbHandlingZwei = new Db('host','user','pw','db');
//erstes statement mit while, ich lasse das statement bewuste weg 
//und schildere nur das nötigste, $query wurde gebildet
while($dbDataFetch $dbHandling->DbFetch($query)){
 
       
//2 abfrage die auf erster basiert und hier tritt dann das problem auf
       //2 statement ich begrenze es auf das wichtigste auch hier besteht
       //ein query
       
$dbDataFetchZwei $dbHandlingZwei->DbFetch($andererQuery);
 
       
//hier sollen ausgaben aus beiden querys erfolgen
 

Meine Frage nun, wie kann ich es erreichen das ich bei verschachteleten / verzweigten SQL Abfragen nicht immer 2 oder gar noch mehr Instanzen auf die Mysql Klasse bilden muss und somit immer wieder eine neue Verbindung zur Datenbank aufmachen bzw. herstellen muss?

Vielen Dank für eure Antworten und Hilfe Mfg litter
__________________
Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
http://www.lit-web.de
litterauspirna ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 16.02.2010, 12:48  
erc
Erfahrener Benutzer
 
Registriert seit: 02.01.2009
Beiträge: 730
PHP-Kenntnisse:
Fortgeschritten
erc wird schon bald berühmt werden
Standard

Indem du das Resultset als eigenes Objeket betrachtest. Das heißt dbquery() sollte dir ein Objekt zurückgeben was das Resultset darstellt.
erc ist offline  
Alt 16.02.2010, 12:53  
Moderator
 
Benutzerbild von Asipak
 
Registriert seit: 18.07.2005
Beiträge: 4.072
Asipak sorgt für eine eindrucksvolle AtmosphäreAsipak sorgt für eine eindrucksvolle Atmosphäre
Standard

@erc

Welche Eigenschaften hat dann das Objekt? Nur die ResourceID, die mysql_query() zurückliefert?
Asipak ist offline  
Alt 16.02.2010, 12:54  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.990
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Einfache Antwort: Nicht mit Deiner Klasse. Du hast mit der Connection-Ressource und der Query-Ressource zwei Dinge zusammenkomponiert, die nicht zusammengehören. Du hast eine Property für Queries, aber 2 Queries.
Die Lösung kann nur sein, die Queries in ein weiteres Objekt auszulagern und dieses (Array!) dann in die Klasse einzubinden.

Wenn Du Dir mysqli ansiehst, ist es dort genauso. object->query liefert ein Objekt.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] 2 MySQL Tabellen abfragen jordanoooo Datenbanken 7 16.02.2010 18:42
[Erledigt] Problem mit mySQL Klasse Thek PHP Tipps 2009 3 13.07.2009 23:06
[Erledigt] mysql abfragen (interval datum) AllOnline PHP Tipps 2009 20 03.07.2009 10:14
[Erledigt] MySQL Probleme IchKannEsNicht Datenbanken 5 16.04.2009 02:43
MySQL Klasse Gödda PHP Tipps 2009 8 17.02.2009 01:56
aufrufende Klasse und Funktion abfragen?? galaxyshadow PHP Tipps 2008 4 10.06.2008 06:43
Berechnung über mehrere Abfragen aus mysql Slappi PHP Tipps 2008 2 18.12.2007 14:22
mysql klasse - handling mehrerer connections mrSpok PHP Tipps 2006 5 14.04.2006 01:05
Probleme mit MySQL 4.1.18 frankys9 Datenbanken 3 17.03.2006 10:42
Probleme beim �bertragen an eine Mysql Datenbank Datenbanken 2 07.03.2006 21:26
Probleme seit MySQL 4.1.7 Server, Hosting und Workstations 3 21.12.2004 14:17
MySql und Php (Probleme mit Sonderzeichen) pit62 PHP-Fortgeschrittene 4 15.06.2004 04:19
MySQL DB Tabellen Kommentar abfragen Datenbanken 3 13.06.2004 22:41
probleme bei mysql PHP Tipps 2004 3 07.06.2004 21:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql klasse, db_num_rows mysql, mysql verschachtelte abfrage, mysqli verschachtelte abfragen, mysql verschachtelte if, mysqli query verschachteln, $this->db_connect(), php sql statement klasse, php klassen sql, php mysql verschachtelte abfrage, php mysql klasse abfrage in abfrage, verschachtelte mysqli queries, abfrage mysql class, verschachtelte objekte abfragen php, sql 12 klasse, php mysql statement schachteln, mysql verschachtelt, php mysql klasse 2011, 2 mysql queries verschachtelt, db_connect query fetch array

Alle Zeitangaben in WEZ +2. Es ist jetzt 21:24 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum