php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 05-03-2005, 11:41
Eagle
 Guest
Eagle
Beiträge: n/a
Standard [Bug] mysql_num_rows in MySQL-Klasse?!?

Hallo!

Ich hab eine eigene MySQL-Klasse, in der ich diverse Funktionen habe.
Eine davon ist auch num_rows(), welche den PHP-Befehl mysql_num_rows ausführt.

Mein Problem ist nun, dass ich dem PHP-Befehl bekanntermaßen eine Resource-ID übergeben muss.
Dazu wird zuvor per $mysql->query() ein Query ausgeführt, welcher ja als Ergebnis eine Resource-ID enthält.

Nun ist es gewöhnlich so, dass ich
PHP-Code:
$mysql->num_rows($mysql->query("SELECT irgendwas FROM irgendwo")); 
nutze.
Das funktioniert einwandfrei - bis zu dem Punkt, an dem ich eben diese Verschachtelung nicht nutze, sondern es einzeln erledige, z. B. so:
PHP-Code:
$mysql->query("SELECT irgendwas FROM irgendwo");
$mysql->num_rows(); 
Und genau hier kommt es zum Fehler, denn num_rows() bekommt keine Resource-ID übergeben und meldet mir deshalb:
Zitat:
Warning: Missing argument 1 for num_rows() in /home/www/web8/html/test.php on line 73
Nun hab ich versucht, dass Problem so zu umgehen:
PHP-Code:
    function num_rows($numrowsQuery)
{
    
$numrowsQuery == $this->num_rows mysql_num_rows($this->query) : $this->num_rows $numrowsQuery;

    return 
$this->num_rows;

Sofern beim Aufruf von num_rows nichts in Klammern übergeben wird, soll die Resource-ID des letzten Querys genutzt werden.
Die Variable $numrowsQuery ist direkt am Anfang der Klasse deklariert.

Im Prinzip funktioniert das auch, aber warum kriege ich dann trotzdem diese Warning-Meldung?!?

Bitte helft mir! - Danke schon mal im Voraus dafür!

MfG, Martin!
Mit Zitat antworten
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 05-03-2005, 11:44
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
Blog-Einträge: 1
TobiaZ befindet sich auf einem aufstrebenden Ast
Standard

ohne alles zu lesen, da du mal wieder nicht ausreichend umbrüche drin hast,


$DB->Query():
$this->result =mysql_query($sql);

$DB->NumRows():
return mysql_num_rows($this->result);

fertig!!
__________________
ERST LESEN: Unsere Regeln. | Ich hab schon Pferde kotzen sehn!

READ THIS: Strings richtig trennen/verbinden | JOINs, das leidige Thema | Wegwerf E-Mail Adressen

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3 (permalink)  
Alt 05-03-2005, 11:47
asp2php
 Banned
Links : Onlinestatus : asp2php ist offline
Registriert seit: Feb 2004
Beiträge: 11.745
asp2php ist zur Zeit noch ein unbeschriebenes Blatt
Standard

mache aus:
PHP-Code:
function num_rows($numrowsQuery) ... 
einfach
PHP-Code:
function num_rows($numrowsQuery=0) ... 
Mit Zitat antworten
  #4 (permalink)  
Alt 05-03-2005, 11:49
Godfrey
 Junior Member
Links : Onlinestatus : Godfrey ist offline
Registriert seit: Jan 2005
Beiträge: 126
Godfrey ist zur Zeit noch ein unbeschriebenes Blatt
Standard

So wie ich das sehe hast Du eine Funktion die Parameter erwartet, Du aber in dem einen Fall keine übergibst. Sagt auch die Fehlermeldung aus.

Eine saubere Lösung nach dem Objektorientierten Ansatz wäre eine zweite Funktion zu schaffen:

PHP-Code:
function num_rows()
{
    return 
$mysql_num_rows($this->query);

Programmiere erst seeit ca. 1 Monat in PHP und hab mich noch nicht mit Klassen beschäftigt, denke aber, das sollte auch in PHP möglich sein.

Geändert von Godfrey (05-03-2005 um 11:56 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 05-03-2005, 11:58
Eagle
 Guest
Eagle
Beiträge: n/a
Standard

Zitat:
Original geschrieben von TobiaZ
ohne alles zu lesen, da du mal wieder nicht ausreichend umbrüche drin hast,


$DB->Query():
$this->result =mysql_query($sql);

$DB->NumRows():
return mysql_num_rows($this->result);

fertig!!
Wieso hab ich bitte keine Umbrüche?!? - Ich hab 1024x768 und KEINE horizontale Scroll-Leiste!

Und dein Code hilft mir nicht wirklich weiter, weil ich's ja eigentlich so hab, wie du's mir empfiehlst!


@ asp2php: Und wenn ich das so mache, ist's dann egal, ob ich $mysql->num_rows($mysql-query()); mache oder $mysql->query(); und danach $mysql->num_rows();?!?


@ Godfrey: Ja aber dazu ist doch der Tenary-Operator gedacht: der überprüft, ob der Parameter vorhanden ist und wenn ja, soll mysql_num_rows anhand des Parameters durchgeführt werden - sonst soll der letzte Query genommen werden.
Oder hab ich da 'nen Logikfehler drin?!?

@ Edit @ Godfrey: Naja, ich will ja, dass INNERHALB der Funktion num_rows() geprüft wird, ob ein Parameter übergeben wurde und wenn ja, soll dieser genutzt werden, ansonsten soll der letzte Query als Parameter verwendet werden.
Mit Zitat antworten
  #6 (permalink)  
Alt 05-03-2005, 12:06
Godfrey
 Junior Member
Links : Onlinestatus : Godfrey ist offline
Registriert seit: Jan 2005
Beiträge: 126
Godfrey ist zur Zeit noch ein unbeschriebenes Blatt
Standard

asp2php hat Dir nur eine Möglichkeit gezeigt wie Du sozusagen einen Defaultparameter in der Funktion setzt. Rufst Du die Funktion ohne Parameter auf wird die 0 genommen, andernfalls der Wert aus der Variablen.

Der Unterschied ist, Du hast eine Funktion die eine Variable erwartet. Du überprüfst nicht ob eine Variable übergeben wird, sondern den Inhalt einer Variablen.

Versuch mal die zweite Funktion zu implementieren, sollte dann gehen. In dieser wird ja genau der IF-Wert der ersten Abfrage zurückgegeben.

Vielleicht nochmal deutlicher, die Funktion ERWARTET einen Parameter, im zweiten Fall übergibst Du keinen, genau das sagt auch die Fehlermeldung aus.
Mit Zitat antworten
  #7 (permalink)  
Alt 05-03-2005, 12:47
Eagle
 Guest
Eagle
Beiträge: n/a
Standard

Zitat:
Original geschrieben von Godfrey
asp2php hat Dir nur eine Möglichkeit gezeigt wie Du sozusagen einen Defaultparameter in der Funktion setzt. Rufst Du die Funktion ohne Parameter auf wird die 0 genommen, andernfalls der Wert aus der Variablen.

Der Unterschied ist, Du hast eine Funktion die eine Variable erwartet. Du überprüfst nicht ob eine Variable übergeben wird, sondern den Inhalt einer Variablen.

Versuch mal die zweite Funktion zu implementieren, sollte dann gehen. In dieser wird ja genau der IF-Wert der ersten Abfrage zurückgegeben.

Vielleicht nochmal deutlicher, die Funktion ERWARTET einen Parameter, im zweiten Fall übergibst Du keinen, genau das sagt auch die Fehlermeldung aus.
Ja, aber ich setze doch direkt am Anfang der Klasse per $numrowsQuery = 0; die Variable auf 0?!?
Wieso muss ich das beim Parameter nochmal tun? - Ich denke, Variablen, die man oben in der Klasse definiert, gelten überall in den Funktionen?!?

Und wenn ich function num_rows ($numrowsQuery = 0) mache, wird $numrowsQuery auf 0 gesetzt, wenn kein Parameter übergeben wird und sonst wird $numrowsQuery auf den Wert vom übergebenen Parameter gesetzt?!?


LG und danke schon mal!
Mit Zitat antworten
  #8 (permalink)  
Alt 05-03-2005, 13:04
Godfrey
 Junior Member
Links : Onlinestatus : Godfrey ist offline
Registriert seit: Jan 2005
Beiträge: 126
Godfrey ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [Bug] mysql_num_rows in MySQL-Klasse?!?

Zitat:
Original geschrieben von Eagle
Warning: Missing argument 1 for num_rows() in /home/www/web8/html/test.php on line 73
Die Fehlermeldung sagt doch genau aus, es fehlt beim Aufruf der Funktion num_rows() ein Argument = Parameter = Variable.

Du hast keine Funktion num_rows() die KEINEN Parameter erwartet, deshalb auch die Fehlermeldung...

Das Du die Variable am Anfang auf 0 setzt hat hier keine Bedeutung, da es nicht darum geht, dass die Variable vorhanden ist, sondern es geht darum, dass in der Funktion keine übergeben wird.

Oder anders gesagt, Du kannst in einer Funktion NICHT überprüfen ob eine Variable übergeben wurde, sondern nur welchen Wert eine Variable hat. Das sind eigentlich Grundlagen der Programmierung.

Eine andere Mölglichkeit wäre eine Funktion(...) zu machen, dieser könntest Du variabel Parameter übergeben. Da musst Dich dann im Code selbst darum kümmern ob und welche vorhanden ist. Ist aber an der Stelle nicht sauber.

Die sauberste Lösung ist die, welche ich mit dem einführen einer zweiten Funktion gezeigt habe.
Mit Zitat antworten
  #9 (permalink)  
Alt 05-03-2005, 13:19
Eagle
 Guest
Eagle
Beiträge: n/a
Standard Re: Re: [Bug] mysql_num_rows in MySQL-Klasse?!?

Zitat:
Original geschrieben von Godfrey
Die Fehlermeldung sagt doch genau aus, es fehlt beim Aufruf der Funktion num_rows() ein Argument = Parameter = Variable.

Du hast keine Funktion num_rows() die KEINEN Parameter erwartet, deshalb auch die Fehlermeldung...

Das Du die Variable am Anfang auf 0 setzt hat hier keine Bedeutung, da es nicht darum geht, dass die Variable vorhanden ist, sondern es geht darum, dass in der Funktion keine übergeben wird.

Oder anders gesagt, Du kannst in einer Funktion NICHT überprüfen ob eine Variable übergeben wurde, sondern nur welchen Wert eine Variable hat. Das sind eigentlich Grundlagen der Programmierung.

Eine andere Mölglichkeit wäre eine Funktion(...) zu machen, dieser könntest Du variabel Parameter übergeben. Da musst Dich dann im Code selbst darum kümmern ob und welche vorhanden ist. Ist aber an der Stelle nicht sauber.

Die sauberste Lösung ist die, welche ich mit dem einführen einer zweiten Funktion gezeigt habe.
Hmm, hab grad via "Versuch-Irrtum-Prinzip" rausgefunden, dass ich den 3-fachen Operator in der Klammer hinter function num_rows nicht verwenden kann - das ist mies...

Wie dem auch sei, dann mach' ich das mit $numrowsQuery = 0, weil so funzt das Ganze und 2 Funktionen für ein und den selben PHP-Befehl ist dann doch etwas absurd...

Dass das Grundlagen der Programmierung sein mögen, kann durchaus sein. Jedoch bring ich mir PHP eigentlich so gut wie selbst bei - ohne Buch, mit wenigen Tuts und SEEEEEHR vielen Versuchen...
Von daher übe bitte etwas Nachsicht, denn sooo lange bin ich auch noch nicht im PHP-OOP-Geschäft!
Mit Zitat antworten
  #10 (permalink)  
Alt 05-03-2005, 13:29
Godfrey
 Junior Member
Links : Onlinestatus : Godfrey ist offline
Registriert seit: Jan 2005
Beiträge: 126
Godfrey ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Mhhh, hab Dir keinen Vorwurf gemacht.

Aber es gibt immer mehrere Möglichkeiten, hier sind es das saubere oder unsaubere Programmieren.

Solltest Du ernsthaft daran denken Programmierung zu Deinem Beruf zu machen wäre es sehr wichtig sauber zu programmieren. Das hilft in erster Linie Dir, vor allem bei der Fehlersuche.

Was die beiden Funktionen angeht, beide Funktionen haben eine andere Aufgabe. In der OO-Programmierung nennt man das überladene Funktionen und kommen sehr häufig vor.

Und sieh das bitte nicht als Zurechtweisung an, das sind einfach Ratschläge von jemand der schon ca. 20 Jahre Programmiererfahrung hat.
Mit Zitat antworten
  #11 (permalink)  
Alt 05-03-2005, 13:34
Eagle
 Guest
Eagle
Beiträge: n/a
Standard

Zitat:
Original geschrieben von Godfrey
Mhhh, hab Dir keinen Vorwurf gemacht.

Aber es gibt immer mehrere Möglichkeiten, hier sind es das saubere oder unsaubere Programmieren.

Solltest Du ernsthaft daran denken Programmierung zu Deinem Beruf zu machen wäre es sehr wichtig sauber zu programmieren. Das hilft in erster Linie Dir, vor allem bei der Fehlersuche.

Was die beiden Funktionen angeht, beide Funktionen haben eine andere Aufgabe. In der OO-Programmierung nennt man das überladene Funktionen und kommen sehr häufig vor.

Und sieh das bitte nicht als Zurechtweisung an, das sind einfach Ratschläge von jemand der schon ca. 20 Jahre Programmiererfahrung hat.
Ja, also, ähm, naja, ich werd' SEHR WAHRSCHEINLICH (!) ab Herbst ein Berufsakademie-Student für Software-Entwicklung sein...

Von daher bin ich eigentlich IMMER um sauberen und korrekten Code bemüht.

Wie sollte es denn IN ETWA aussehen, wenn's sauberer Code sein soll?!?
Mit Zitat antworten
  #12 (permalink)  
Alt 05-03-2005, 13:36
Godfrey
 Junior Member
Links : Onlinestatus : Godfrey ist offline
Registriert seit: Jan 2005
Beiträge: 126
Godfrey ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Lösung hab ich in meinem ersten Posting hier bereits beschrieben.
Mit Zitat antworten
  #13 (permalink)  
Alt 05-03-2005, 13:43
Eagle
 Guest
Eagle
Beiträge: n/a
Standard

Zitat:
Original geschrieben von Godfrey
Die Lösung hab ich in meinem ersten Posting hier bereits beschrieben.
Also quasi so:

PHP-Code:
function num_rows ()
{
    return 
mysql_num_rows($this->query);
}

function 
numRows ($numrowsQuery)
{
    return 
mysql_num_rows($numrowsQuery);

Oder meintest du was Anderes?!?
Mit Zitat antworten
  #14 (permalink)  
Alt 05-03-2005, 13:45
Godfrey
 Junior Member
Links : Onlinestatus : Godfrey ist offline
Registriert seit: Jan 2005
Beiträge: 126
Godfrey ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nicht ganz, Deine eine Funktion war ja dahingehend richtig, dass sie die Variable auf den WERT = 0 abgefragt hat. Das soll ja auch so bleiben, es muss nur die zweite Funktion dazukommen.

Ausser Du kannst sicher gehen, dass der Wert 0 nicht vorkommt.

Anderenfalls würde Deine Bussineslogik ja nicht mehr stimmen...

Ach so, nochwas ist mir aufgefallen soeben...

Beide Funtkionen MÜSSEN den gleichen Bezeichner haben, sonst ists ja wieder nicht OOP.

Aber wie gesagt, in PHP hab ich noch nicht OOP programmiert, also weiss ich im Moment nicht ob das geht. Ich habe hier allgemeine OOP-Technik vorrausgesetzt. Wenns jemand besser weiss bitte berichtigen.

Geändert von Godfrey (05-03-2005 um 13:48 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 05-03-2005, 13:47
Eagle
 Guest
Eagle
Beiträge: n/a
Standard

Zitat:
Original geschrieben von Godfrey
Nicht ganz, Deine eine Funktion war ja dahingehend richtig, dass sie die Variable auf den WERT = 0 abgefragt hat. Das soll ja auch so bleiben, es muss nur die zweite Funktion dazukommen.

Ausser Du kannst sicher gehen, dass der Wert 0 nicht vorkommt.

Anderenfalls würde Deine Bussineslogik ja nicht mehr stimmen...
PHP-Code:
function num_rows ()
{
    return 
mysql_num_rows($this->query);
}

function 
numRows ($numrowsQuery 0)
{
    return 
mysql_num_rows($numrowsQuery);


Ist das also die finale Lösung?!?


Oder wäre das hier auch SAUBERER (!) Code:

PHP-Code:
function num_rows($numrowsQuery 0)
{
    return 
mysql_num_rows($numrowsQuery == $this->query $numrowsQuery);


Geändert von Eagle (05-03-2005 um 13:49 Uhr)
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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:29 Uhr.