PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [PHP] Objektklassen-Problem



Hellraiser
14.05.2002, 09:12
Code:




$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.

Steffen
14.05.2002, 11:50
Welche Objektklasse wird denn verwendet? Denn an dem eigenglichen Code hier ist nichts falsch und wenn das Objekt nicht instanziert worden wäre, würde eine andere Fehlermeldung erscheinen. Also tippe ich mal auf einen Fehler in der Objektklasse...

Hellraiser
14.05.2002, 15:08
Ich werd die Klasse nochmal genau untersuchen, kann sein, dass ich einen kleinen fehler mit eingebaut hab.

Hellraiser
14.05.2002, 15:46
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)

Hellraiser
14.05.2002, 15:54
hier ist die ganze funktion:


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.

Steffen
14.05.2002, 16:39
Original erstellt von Hellraiser
hier ist die ganze funktion:


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:

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. :)

Hellraiser
14.05.2002, 18:27
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 ?

Steffen
14.05.2002, 18:42
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

Hellraiser
14.05.2002, 19:55
ah ok, *check* :)