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, 12: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
  #2 (permalink)  
Alt 05-03-2005, 12:44
TobiaZ
  Moderator
Links : Onlinestatus : TobiaZ ist offline
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.421
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 kann und werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Mit Zitat antworten
  #3 (permalink)  
Alt 05-03-2005, 12: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, 12: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 12:56 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 05-03-2005, 12: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, 13: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, 13: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, 14: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, 14: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, 14: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, 14: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, 14: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, 14: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, 14: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 14:48 Uhr)
Mit Zitat antworten
  #15 (permalink)  
Alt 05-03-2005, 14: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 14: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

Vorteile eines flexiblen ERP Systems
Vorteile eines flexiblen ERP SystemsEin flexibles ERP System bietet in allen Unternehmensbereichen die Grundlage für eine erfolgreiche Verwaltung, Organisation und Planung aller Prozesse.

01.12.2021 | Berni

Software für alle Arten von digitalen Marktplätzen
Software für alle Arten von digitalen MarktplätzenDigitale Marktplätze sind nicht nur im B2C Geschäft seit Jahren etabliert, sondern erfreuen sich mit Kleinanzeigen-Märkten auf lokaler und regionaler Ebene auch im privaten Bereich wachsender Beliebtheit.

09.11.2021 | Berni


 

Aktuelle PHP Scripte

kostenloser PHP-Editor Codelobster ansehen kostenloser PHP-Editor Codelobster

Kostenloser PHP, HTML, CSS, JavaScript editor (IDE) - Codelobster PHP Edition

06.12.2021 Berni | Kategorie: PHP ENTWICKLUNGSUMGEBUNG
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

09.11.2021 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Newsletter Script SuperWebMailer ansehen PHP Newsletter Script SuperWebMailer

Die webbasierte PHP Newsletter Software SuperWebMailer ist die optimale Lösung zur Durchführung eines erfolgreichen E-Mail-Marketings. Zur Nutzung des PHP Script-Pakets ist eine eigene Webpräsenz/Server mit PHP 5 oder neuer, MySQL 4 oder neuer und die

28.10.2021 mirko_swm | Kategorie: PHP/ Mail
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:10 Uhr.