Mysql --> Query nimmt während einer Schleife andere Wert an

  • Themenstarter Themenstarter ByeBye 8492
  • Beginndatum Beginndatum
Aber mit der $query_id stimmt doch oder? Müsste mich jetzt echt täuschen, weil du ja das gleiche Objekt benutzt.

edit:

schau da mal nach dem Beitrag von Johannes. Du machst sowas auch. Variablen direkt ansprechen. Mach die am Besten private und da muss ja jeder über eine bestimmte Fkt. gehen. Sonst ist deine Klasse zu unsicher, wenn man die im CMS verwenden soll.

KoMtuR hat dieses Zitat angehängt:
PHP:
/************************************************************* 
* Übergibt die MYSQL Variablen an die Klasse, wird so gemacht* 
* bis ich eine andere Möglichkeit gefunden habe                 * 
*************************************************************/ 
$db = &new mysql;                     
$db -> benutzer        = $benutzer; 
$db -> pass         = $pass; 
$db -> server         = $server; 
$db -> datenbank     = $datenbank; 
$db -> connect();
 
Zuletzt bearbeitet:
Original geschrieben von KoMtuR
Aber mit der $query_id stimmt doch oder? Müsste mich jetzt echt täuschen, weil du ja das gleiche Objekt benutzt.

edit:

schau da mal nach dem Beitrag von Johannes. Du machst sowas auch. Variablen direkt ansprechen. Mach die am Besten private und da muss ja jeder über eine bestimmte Fkt. gehen. Sonst ist deine Klasse zu unsicher, wenn man die im CMS verwenden soll.

Muss ich mir ja nochma OOP angucken *g*.

Warum ist sowas unsicher?

Was meinste mit "Aber mit der $query_id stimmt doch oder? Müsste mich jetzt echt täuschen, weil du ja das gleiche Objekt benutzt."

Das ist der Query, falls du das meintest :)
 
PHP:
function query($query){ 
                    $this -> query_c++; 
                     $this -> query_id[$this->query_c] = @mysql_query($query, $this->link_id); 
                    if(!$this ->query_id) { 
                                       $this->query_c--;
                                        echo "Der Query <i>$query</i> konnte nicht ausgeführt werden"; 
                    } 
                    $this -> aff_rows =@mysql_affected_rows($this->query_id[$this->query_c]); 
                    return $this->query_c; 
} 

function fetch_array($zaehler = -1) { 
                 if($zaehler != -1) 
                 { 
                         $zaehler = $this->query_c; 
                 } 
                 $this -> record = mysql_fetch_array($this-> query_id[$zaehler]); 
                 return $this -> record;
PHP:
$sql = "select * from ". $prefix ."_news_comments where id = $id"; 
$zaehler1 = $db -> query($sql); 
while($result = $db -> fetch_array($zaehler1)){ 
$db -> query("select sig, avatar from `". $prefix ."_user` where `name` = '$autor'"); 
$details = $db -> fetch_array();

Kannst dir auch eine bessere Struktur aussuchen. Müssteste auch mit den Records machen.


edit: ich meine, dass da der fehler lag, weil die query_id gewechselt hatte.

Und wegen unsicher. Da kann jemand die Eigenschaften(=Variablen) deiner DB wärend der Laufzeit ohne eine Überprüfung ändern. Nicht gerade toll. Es gibt immer Leute, die zu blöd sind Daten einzugeben.
 
Zuletzt bearbeitet:
Reicht es wenn ich record einfach als Array deklariere?

Weil die Klasse habe ich vor nem halben Jahr geschrieben und steige durch OOP mittlerweile nicht mehr ganz durch *g*.

Nach der Änderung habe ich leider nen Fehler und er liest nichts mehr aus :heul:

Fehler:
Warning: Cannot use a scalar value as an array in F:\Webserver\xampp\htdocs\optima2\includes\mysql.php on line 47
Der Query select * from cms_block where side = 'c' and active = 1 order by weight asc konnte nicht ausgeführt werden
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in F:\Webserver\xampp\htdocs\optima2\includes\mysql.php on line 76
 
geht durch diese Parameter ziemlich schlecht, wenn du nur $record als Array deklarierst

PHP:
$this -> record = mysql_fetch_array($this-> query_id[$zaehler]);

edit: hier ist nochmal alles korrekt geschrieben. hatte fehler drin

PHP:
function query($query){ 
                    $this -> query_c++; 
                     $this -> query_id[$this->query_c] = @mysql_query($query, $this->link_id); 
                    if(!$this ->query_id[$this->query_c]) { 
                                       $this->query_c--; 
                                        echo "Der Query <i>$query</i> konnte nicht ausgeführt werden"; 
                    } 
                    $this -> aff_rows =@mysql_affected_rows($this->query_id[$this->query_c]); 
                    return $this->query_c; 
} 

function fetch_array($zaehler = -1) { 
                 if($zaehler != -1) 
                 { 
                         $zaehler = $this->query_c; 
                 } 
                 $this -> record = mysql_fetch_array($this-> query_id[$zaehler]); 
                 return $this -> record;
 
Zuletzt bearbeitet:
Original geschrieben von KoMtuR

Und wegen unsicher. Da kann jemand die Eigenschaften(=Variablen) deiner DB wärend der Laufzeit ohne eine Überprüfung ändern. Nicht gerade toll. Es gibt immer Leute, die zu blöd sind Daten einzugeben.

Öhm, wie sollen sie denn durch eine Falsche Eingabe von Daten Variablen verändern?

EDIT: Gerade dein Edit gesehen :), du meinst, ich sollte die "Login" Variablen nicht direkt übergeben?

Muss mir dann erstma was raussuchen, wie man es anders machen kann *G*


EDIT2: Wenn ich dich richtig verstanden habe, sollen die Variablen Klassenintern gesetzt werden, also zum Beipiel durch FUnktionen in der Klasse.

Aber irgendwie muss man doch die Variablen in die Klasse reinkriegen oder nicht?
 
Zuletzt bearbeitet von einem Moderator:
ich kann zum Beispiel die Variable $query_id löschen oder verändern. Auserhalb der Klasse

Mach einfach das var weg und ein private davor. Nun musst du extra Funktionen schreiben, um diese Variablen ansprechen zu können und damit hast du mehr Stabilität.

Bei php5 kam dieser Fehler beim Zugriff von aussen:
Fatal error: Cannot access private property forum::$foo in D:\Apache\Apache2\htdocs\klasse.php on line 56


edit:
PHP:
class mysql{ 

            //benötigt zum connecten: 
            private  $benutzer         = ""; 
            private     $pass             = ""; 
            private  $server         = ""; 
            private  $datenbank        = ""; 

             
            //numerische Variablen 
            private  $query_c         = 0; 
            private  $query_id         = 0; 
            private  $link_id          = 0; 
            private  $aff_rows         = 0; 
            private  $num             = 0; 
             
            //query stuff für die Ausgabe 
            private $record          = ""; 

           function mysql($logindaten) {
               if(is_string($logindaten['benutzer']) {
                       $this->benutzer = $logindaten['benutzer'];
             } //Hier jedes weitere Feld des Arrays prüfen
           }

So wird initialisiert

PHP:
$daten = array(
'Benutzer' => 'Max Mustermann',
'passwort' => 'musterpass',
'server' => 'musterserver',
'datenbank' => 'musterdatenbank');

$db = new mysql($daten);

Das nennt man Konstruktor ;)
 
Zuletzt bearbeitet:
Original geschrieben von KoMtuR
ich kann zum Beispiel die Variable $query_id löschen oder verändern. Auserhalb der Klasse

Mach einfach das var weg und ein private davor. Nun musst du extra Funktionen schreiben, um diese Variablen ansprechen zu können und damit hast du mehr Stabilität.

Bei php5 kam dieser Fehler beim Zugriff von aussen:
Fatal error: Cannot access private property forum::$foo in D:\Apache\Apache2\htdocs\klasse.php on line 56

habe überall private vorgeschrieben, jetzt kommt der Fehler:
Parse error: parse error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in F:\Webserver\xampp\htdocs\optima2\includes\mysql.php on line 6


ich sollte mir wirklich mal wieder OOP angucken ..., das scheint umfangreich zu sein

Jetzt werde ich erstma versuchen, in der Klasse alles auf ein Array umzuwandeln und dann werde ich die Klasse sicherer machen, aber erst wenn sie so wieder läuft, was sie bisher ja dank meiner Mangelnden OOP Erfahrung nicht tut.
 
So, habe jetzt in der Klasse solche Funktionen:

function datenbank($db) {
$this->pass = $db;
return true;
}


ausserhalb der Klasse werden diese so aufgerufen:

$db -> datenbank($datenbank)


ist das jetzt sicherer?

Und wie bekomme ich diesen Stringfehler weg?
 
Schick mir mal bitte das Script hier hin. Hab eh gerade nichts zu tun :)

edit:Ja na was denn sonst ;)

edit2: Müsstest Post bekommen haben.
 
Zuletzt bearbeitet:
Zurück