PHP MySQL Klasse, Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
attribut
auslese
code
durchlauf
eigenschaft
ergebnis
index
klasse code
methode
private deklarierte eigenschaften
re
setting
speichern
statement
status
umweg
vorstellen
zeiger
zeile
-
Hi,
ich hab da mal wieder ein Problem:
Auszüge aus der Klasse:
protected $connection; public $MySQLResult; function connect() { $this->connection = mysql_connect($this->getMySQLHost(), $this->getMySQLUser(), $this->getMySQLPassword() ); } function execute(strStatement) { $Status = mysql_query($strStatement, $this->connection); $this->MySQLResult = mysql_fetch_array($Status); }
so nun setze ich ja mit $this->MySQLResult = mysql_fetch_array($Status); quasi das ergebnis.
und nun möchte ich dieses auslesen:
index.php
$New = new Database(); //... //... while($row=$New->MySQLResult) { $row['user_id']; }
so jetz könnt ihr euch sicherlich denken das es nicht funktioniert, und richtig es funktioniert nicht =(
warum? und wie kann ich im nachhinein die Zeilen zählen also mysql_num_rows($New->MySQLResult);?
*Nicht der Master im PHP OOP, aber in C++ OOP^^*
Beitrag zuletzt geändert: 12.2.2009 17:47:39 von myhead -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
1. Wieso verwendest du Setter und Getter innerhalb der Klasse? Man verwendet diese, um auserhalb der Klasse auf Eigenschaften zuzugriefen.
2. $row['user_id']; ist denke ich kein assoziatives Array (hast ja die Methode MySQLResult() nicht gepostet). -
1) das hab ich so gelernt, und ich weiß auch wofür settings und gettings da sind -> C++ freak^^ ..und kann mir kaum vorstellen das das in PHP ganz anders sein wird...außerdem ist das auch nicht so wichtig....
2)MySQLResult ist ein Attribut^^ ...so und ich habe dann gedacht, kann man ja in einem Attribut "speichern" also $this->MySQLResult = mysql_fetch_array(....,....) ;
ich hab ja auch gedacht da man ja:
$do = mysql_query("SELECT * FROM table"); while($row = mysql_fetch_array($do)) { echo $row['Spaltenname']; echo $row['Index']; }
machen kann, kann man dann auch:
while($row=$New->MySQLResult) { echo $row['Spaltenname']; echo $row['Index']; }
weil ist ja eigl. genau dasselbe nur "über Umwege" sag ich mal^^ ...weil die Eigenschaft MySQLResult ist ja = mysql_fetch_array('query');
Beitrag zuletzt geändert: 12.2.2009 17:47:09 von myhead -
mal ne nebenfrage: definierst du wirklich $Klasse richtig?
Oder weist du, ob er in die Klasse springt? -
meinst du das:
$New = new Database() //bzw. $Klasse = new Database(); /*ich glaub iwo imhier geposteten quelltext hab ich geschrieben $Klasse aber ist in meinem Original schon richtig, dort erstelle ich nur ein Objekt der Klasse..*/
außerdem funktioniert die soweit, also SQL-Statements ohne "Ergebnis" werden ausgeführt -> Drop, Truncate, Create usw.
und die connection() funktion bzw. die hier nicht aufgeführte gibt mir auch jeweils die richtigen werte jenachdem True oder False.
//EDIT, hab das jetzt in den geposteten Quelltexten jetz einheitlich gemacht
Beitrag zuletzt geändert: 12.2.2009 17:49:01 von myhead -
myhead schrieb:
1) das hab ich so gelernt, und ich weiß auch wofür settings und gettings da sind -> C++ freak^^ ..und kann mir kaum vorstellen das das in PHP ganz anders sein wird...außerdem ist das auch nicht so wichtig....
Moment. Man verwendet Set- und Getmethoden um von auserhalb der Klasse auf als private deklarierte Eigenschaften zuzugreifen. Das macht innerhalb(!) einer Klasse keinen Sinn, weder in C++, noch in Java noch in PHP. Aber ist ja dein Bier.
myhead schrieb:
2)MySQLResult ist ein Attribut^^ ...so und ich habe dann gedacht, kann man ja in einem Attribut "speichern" also $this->MySQLResult = mysql_fetch_array(....,....) ;
ich hab ja auch gedacht da man ja:
$do = mysql_query("SELECT * FROM table"); while($row = mysql_fetch_array($do)) { echo $row['Spaltenname']; echo $row['Index']; }
machen kann, kann man dann auch:
while($row=$New->MySQLResult) { echo $row['Spaltenname']; echo $row['Index']; }
weil ist ja eigl. genau dasselbe nur "über Umwege" sag ich mal^^ ...weil die Eigenschaft MySQLResult ist ja = mysql_fetch_array('query');
Vom der Logik her nachvolziehbar, jedoch hast du einen kleinen Denkfehler. Mysql_fetch_* liefert dir nicht die kompletten Ergebnisse der SQL-Abfrage, sondern jeweils immer nur eine einzelne Zeile! Nach jedem Durchlauf von mysql_fetch_* wird ein Zeiger auf die nächste Zeile gelegt. Du rufst also (solange Ergebnisse zurück geliefert werden) immer die gleiche Funktion mehrmals auf (while($row = mysql_fetch_*($res))) und gibst nicht expliziert an, welche Zeile zurück kommen soll. Das handelt MySQL selber, indem es intern nach jeder Zeile zur nächsten Zeile springt. Das heißt, du musst erst mal in deiner Datenbankklasse in deiner Methode die Ergebnisse in einem Array initialisieren, welchen du dann (auserhalb der Klasse) mit einer Schleife durchgehen kannst. -
Hey, ja ist mir auch schon aufgefallen, hab das jetzt erstmal so gemacht, das ich nur den mysql_query() zurückgebe...reicht erstmal für testzwecke =)
danke =)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage