[PHP] Objektklassen-Problem

Hellraiser

Lt. Junior Grade
Registriert
Juli 2001
Beiträge
459
[php]

Code:

PHP:
$date = "12.00-13.00_12.12.1987";

$DB->query("DELETE FROM entries WHERE date='$date'");

Fehlermeldung:
Warning: Supplied argument is not a valid MySQL result resource

Das Object, das auf seine query klasse gugreift funktioniert einwandfrei bei select anweisungen, bei delete funktioniert es aber anscheind nicht.
 
Ich werd die Klasse nochmal genau untersuchen, kann sein, dass ich einen kleinen fehler mit eingebaut hab.
 
es scheint die mysql_fetch_array funktion einen fehler zu haben, die query_id ist jedoch nicht false:

[PHP$this->array = mysql_fetch_array($this->query_id);[/PHP]

dort meldet der interpreter den fehler (laut zeilennummer)
 
hier ist die ganze funktion:
PHP:
  function query($string) {
    $this->query_id = mysql_query($string,$this->link_id);
    if (!$this->query_id) {
      $this->stop();
    }
    if ( isset($this->query_id) ) {
      $this->array = mysql_fetch_array($this->query_id);
    } else {
      $this->stop();
    }
    return $this->array;
  }
Bei SELECT Anweisungen funktioniert alles prima, nur bei UPDATE, INSERT und DELETE hab ich Probleme mit dieser Fehlermeldung.
 
Original erstellt von Hellraiser
hier ist die ganze funktion:
PHP:
if ( isset($this->query_id) ) {
  $this->array = mysql_fetch_array($this->query_id);
} else {
  $this->stop();
}
Das Problem ist dieser Code-Abschnitt. Wenn die Query erfolgreich war, wird eine Query-ID gesetzt. Egal, ob es sich um eine SELECT-, INSERT-, UPDATE- oder DELETE-Anweisung handelt. Also wird in jedem Fall versucht, mittels mysql_fetch_array() die ausgelesen Daten in ein Array zu speichern. Aber es werden ja nur bei SELECT-Anweisungen Daten zurückgegeben, die mysql_fetch_array() verarbeiten kann!

Daher würde ich den Code wie folgt ändern:
PHP:
function query($string) {
    $this->query_id = mysql_query($string,$this->link_id) or $this->stop();
    if ( substr( $string, 0, 6 ) == "SELECT" ) {
        $this->array = mysql_fetch_array($this->query_id);
    }
    return $this->array;
}
Der Fall, dass die Query nicht ausgeführt werden kann, wird mit dem "or $this->stop()" berücksichtigt. Danach wird überprüft, ob die ersten 6 Zeichen des Query-Strings "SELECT" sind und somit ein Array erstellt werden kann. Wenn es sich um etwas anderes als eine SELECT-Anweisung handelt, wird die Query zwar ausgeführt, aber halt kein Array erstellt. :)
 
spitze, jo jetzt geht es, da hätt ich eigentlich auch selber drauf kommen können, die lösung mit substr gefällt mir auch sehr, aber sollte die 6 keine 5 sein ?
 
Nein, das is schon richtig so. ;)

Die beiden letzten Argumente heißen nicht "Starte bei Zeichen 0 bis einschließlich Zeichen 6", sondern die 0 gibt an, wieviele Zeichen am Anfang der Zeichenkette übersprungen werden sollen. Da wir ganz vorne anfangen wollen also null. Das dritte Argument bestimmt die Anzahl der Zeichen und bei mir ist "SELECT" immer noch 6 Zeichen lang. :D
 
Zurück
Oben