php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.10.2006, 10:50  
Erfahrener Benutzer
 
Registriert seit: 25.08.2005
Beiträge: 250
PHP-Kenntnisse:
Fortgeschritten
FireFIghter
Standard Problem mit MsSQL Klasse

Hallo,

ich brauche mal wieder eure Hilfe und zwar habe ich eine PHP Klasse geschrieben, mit der ich auf eine MsSQL Datenbank zugreife und später die Daten über eine while Schleife auslese doch leider läuft die Schleife weiter und stoppt nicht, es wird hunderte male der gleiche Datensatz ausgegeben.

Problem: Die Datensätze werden zu oft ausgegeben.

config.php
PHP-Code:
$Typ 'SQL';         // Oracle, SQL, Access
$Host 'localhost'
$Benutzername 'XXX';
$Passwort 'XXX';
$Datenbank 'XXX';        // Nur bei MS SQL Server

if($Typ 'SQL'){
    include(
'lib_mssql.php');

lib_mssql.php
PHP-Code:
define(Host$Host);
define(Benutzername$Benutzername);
define(Passwort$Passwort);
define(Datenbank$Datenbank);

$lib = new mssql_lib();
class 
mssql_lib{
    var 
$Host Host;
    var 
$Benutzername Benutzername;
    var 
$Passwort Passwort;
    var 
$Datenbank Datenbank;
    
    function 
connect(){
        
mssql_connect($this->Host,$this->Benutzername,$this->Passwort);
        
mssql_select_db($this->Datenbank);
    }
    
    function 
close(){
        
$this->connect mssql_close();
    }
    
    function 
query($sql){
        if (
$this->connect == false$this->connect();
        
$query mssql_query($sql);
        return 
$query;
    }
    
    function 
fetch_object($sql){
        
$query $this->query($sql);
        
$object mssql_fetch_object($query);
        return 
$object;
    }
    
    function 
fetch_result($sql,$row,$field){
        
$query $this->query($sql);
        
$result mssql_result($query,$row,$field);
        return 
$result;
    }

test.php
PHP-Code:
require('config.php');
while(
$object $lib->fetch_object('SELECT * FROM TB_1')){
    echo 
$object->BESCHREIBUNG.'
'
;

FireFIghter ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 02.10.2006, 12:20  
Gast
 
Beiträge: n/a
Standard

Ist ja auch klar, weil Du
PHP-Code:
while($object $lib->fetch_object('SELECT * FROM TB_1')){ 
Die SQL ja immer neu ausführst.

Beim ersten Aufruf holt die Funktion alle Datensätze und gibt den Ersten als Objekt zurück. 2ter Aufruf genau das identische. 3ter Aufrufe usw...

PHP-Code:
function fetch_object($sql){
        
$query $this->query($sql);
        
$object mssql_fetch_object($query);
        return 
$object;
    } 
Hier wird bei jedem Aufruf der while Schleife die sql ausgeführt so bekommst zum Beispiel 10 Datensätze und gibst den Ersten wieder zurück. Das machst Du mit Deienr while Schleife unendlich so weiter
 
Alt 02.10.2006, 12:48  
Erfahrener Benutzer
 
Registriert seit: 25.08.2005
Beiträge: 250
PHP-Kenntnisse:
Fortgeschritten
FireFIghter
Standard

Stimmt war ein blöder Fehler. Sind meist die einfachen dinge wo man dann nicht drauf kommt. Danke.

Doch wie kann ich die Datensätze dann auslesen?

Mein neuer Versuch ist noch schlechter Verlaufen. Da ist gleich mein ganzer Rechner bei abgestürzt.
PHP-Code:
<?php
require('config.php');
$object $lib->fetch_object('SELECT * FROM TB_1');
while(
$object){
    echo 
$object->BESCHREIBUNG.'
'
;
}
?>
FireFIghter ist offline  
Alt 02.10.2006, 13:42  
Gast
 
Beiträge: n/a
Standard

Ich vermute einfach mal das da wieder eine Endlosschleife raus kommt, wenn man über ein Objekt eine while Schleife laufen lässt.

PHP-Code:
while($object){
    echo 
$object->BESCHREIBUNG.'
'
;

Du musst mit Deiner Schleife über die Ergbnisse der SQL laufen

PHP-Code:
  $sql "SELECT xxx";
  
$db->query($sql);
  
$result $db->fetchresult();
  while( 
$array mysql_fetch_assoc$result ) )
  {
    echo 
$array['beschreibung'];
  } 
Als kleines Beispiel. musst noch auf Deine Klasse bischen anpassen.

Als erstes machst über query die sql an die Datenbank ansetzen. Dann holst Dir das gesamte Result und machst darüber dann Deine While-Schleife.
 
Alt 02.10.2006, 14:50  
Erfahrener Benutzer
 
Registriert seit: 25.08.2005
Beiträge: 250
PHP-Kenntnisse:
Fortgeschritten
FireFIghter
Standard

Danke. Jetzt klappt es



PHP-Code:
<?
define
(Host$Host);
define(Benutzername$Benutzername);
define(Passwort$Passwort);
define(Datenbank$Datenbank);

$lib = new mssql_lib();
class 
mssql_lib{
    var 
$Host Host;
    var 
$Benutzername Benutzername;
    var 
$Passwort Passwort;
    var 
$Datenbank Datenbank;
    
    function 
connect(){
        
mssql_connect($this->Host,$this->Benutzername,$this->Passwort);
        
mssql_select_db($this->Datenbank);
    }
    
    function 
query($sql){
        if (
$this->connect == false$this->connect();
        
$query mssql_query($sql);
        return 
$query;
    }
    
    function 
fetch_object($query){
        
$object mssql_fetch_object($query);
        return 
$object;
    }
    
    function 
fetch_result($sql,$row,$field){
        
$query $this->query($sql);
        
$result mssql_result($query,$row,$field);
        return 
$result;
    }
    
    function 
fetch_array($query){
        
$result mssql_fetch_array($query);
        return 
$result;
    }
}
?>
PHP-Code:
<?php
require('config.php');
$sql $lib->query('SELECT * FROM TB_1');
while(
$result $lib->fetch_object($sql)){
    echo 
$result->BESCHREIBUNG.'
'
;
}
?>
FireFIghter ist offline  
Alt 02.10.2006, 20:48  
Gast
 
Beiträge: n/a
Standard

Was hälst Du davon das result in der Klasse zu speichern und dieses nicht jedes Mal als return und Parameter wieder zu übergeben?

PHP-Code:
function query($sql)
{
  unset( 
$this->result );
  if( !
$this->connect 
    
$this->connect();
  
$this->result mssql_query($sql);
}
function 
fetch_object()
{
  if( !isset( 
$this->result )
  {
    return 
false;
  }
  return 
mssql_fetch_object($query);

 
Alt 04.10.2006, 08:45  
Erfahrener Benutzer
 
Registriert seit: 25.08.2005
Beiträge: 250
PHP-Kenntnisse:
Fortgeschritten
FireFIghter
Standard

^^ versuch ich mal bei gelegenheit bin froh das es überhaupt klappt
FireFIghter 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
Problem mit Image - Klasse DER_Brain PHP Tipps 2008 0 03.12.2007 21:53
Problem mit OOP PHP Tipps 2005-2 5 01.09.2005 19:37
Problem mit mysql_fetch_array in Klasse PHP Tipps 2005-2 3 16.08.2005 09:14
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
problem mit klasse zum registrieren Fraylman PHP Tipps 2005-2 5 05.07.2005 13:55
Problem mit einer rekursiven Funktion in einer Klasse ajo_silent PHP-Fortgeschrittene 6 13.06.2005 16:40
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
Unverständlichkeit bei dem Instanzieren einer Klasse... PHP Tipps 2005-2 2 08.06.2005 12:44
Problem beim Registrieren von Session-Variablen in Klasse zwelch PHP-Fortgeschrittene 6 18.10.2004 08:07
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
Problem bei einer Klasse mit "hat" beziehung PHP Tipps 2004 4 06.10.2004 21:29
[Erledigt] Brauche Hilfe bei meiner ersten Klasse PHP-Fortgeschrittene 9 24.09.2004 17:09
Problem mit optionalen Parametern bei Funktion in Klasse RudiS PHP-Fortgeschrittene 6 24.09.2004 09:03
Klassenobjet in anderer Klasse benutzen inu PHP Tipps 2004 6 19.09.2004 10:58
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
mssql fetch_object, mssql klasse, mssql klasse php, php datenbank klasse ms sql server, mssql while stoppt nicht, php class mssql, sql mssql beispiel function, einfache mssql_query beispiel, lib_mssql, \zu oft ausgegeben\ php

Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.