CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |
05.09.2007, 22:28:38
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
DELETE Problem
Guten Abend!
Ich habe ein kleines Problem. Ich möchte, wenn ich ein Hauptverzeichnis aus einer DB lösche, auch die Unterverzeichnisse löschen. Das ganze geht nur rekursiv. Allerdings ist mir in dem folgenden Script ein Fehler unterlaufen.
PHP-Code:
// DELETE SECTIONS ////////////////////////////////////////////////////////////////////
if ($_REQUEST['delete']) {
// Store the section ID to be deleted in a variable
$sectionID = $_REQUEST['id'];
echo $sectionID;
// Validate the sectionID, and if it's ok delete the section
if ( $validator->validateNumber($sectionID,'Section ID') ){
function remove_tree($ID) {
$result = $GLOBALS['connector']->query('SELECT ID FROM cmssections WHERE parentid=' . $ID . 'AND DELETE FROM cmssections WHERE ID = '.$ID);
while ($section = mysql_fetch_array($result)) {
remove_tree($section[ID]);
}
}
remove_tree($sectionID);
// The validator returned true, so go ahead and delete the section
echo 'Section Deleted.<br>';
}else{
// The validator returned false, meaning there was a problem
echo "Couldn't delete. There was a problem with: ".$validator->listErrors();
}
}
DIe Fehlermeldung:
Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/redway/www/CMS/cmsadmin/editSections.php on line 23
Eine ID wird an die Funktion übergeben. Der Fehler muss in der Datenbank ansprache liegen:
Code:
SELECT ID FROM cmssections WHERE parentid=' . $ID . 'AND DELETE FROM cmssections WHERE ID = '.$ID
Wäre euch für eure Hilfe sehr dankbar. Beschäftige mich leider erst seit gestern mit rekursiven Funktionen.
MfG, Andy
|
05.09.2007, 22:49:41
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: DELETE Problem
bietet $GLOBALS['connector'] auch eine Möglichkeit, Fehlermeldungen anzuzeigen?
|
05.09.2007, 23:16:13
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: DELETE Problem
Abend!
Ja natürlich. Deshalb steht sie ja auch oben. Ich muss eigentlich nur wissen, wie ich den folgenden Teil ändern muss, damit die Syntax korrekt ist.
Code:
SELECT ID FROM cmssections WHERE parentid=' . $ID . 'AND DELETE FROM cmssections WHERE ID = '.$ID
MfG, Andy
|
05.09.2007, 23:40:58
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: DELETE Problem
Äh nein, das ist eine Meldung von PHP.
Ich meinte: Kann das Datenbankobjekt in $GLOBALS['connector'] irgendwie die Meldungen des SQL Servers ausgeben?
Was ist $GLOBALS['connector'] ?
Geändert von defabricator (05.09.2007 um 23:41:15 Uhr)
|
05.09.2007, 23:56:45
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: DELETE Problem
Abend!
$GLOBALS['connector'] ist, wie du ganz richtig erkannt hast, ein Objekt, dass aus einer Klasse DbConnector erzeugt wird und global gemacht wird, damit es auch in meiner obigen Funktion verfügbar ist. Die Klasse DbConnector stellt die Verbindung mit der Datenbank her und verarbeitet die SQL-Abfragen, sodass der Quellcode übersichtlicher wird. Die Klasse funktioniert einwandfrei. Wie die Fehlermeldung schon sagt, liegt der Fehler im SQL-Befehl. Ich müsste nur wissen, wie dieser geändert werden muss, damit dieser Stimmt. Und nein ich erhalte keine weitere Fehlermeldung.
MfG, Andy
Geändert von Socrates (05.09.2007 um 23:57:36 Uhr)
|
06.09.2007, 00:32:37
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: DELETE Problem
Zitat:
Wie die Fehlermeldung schon sagt, liegt der Fehler im SQL-Befehl.
|
Ja, irgendwo da so halt, man weiß es nicht genau.
Diese "Warning: mysql_fetch_array(): supplied argument" tritt auf, weil vorher schon was schief gelaufen ist. Wenn das Objekt in $GLOBALS['connector'] keine Möglichkeit liefert, diese vorangegangene SQL Meldung zu verwerten, ist sie unvollständig (um nicht "Schrott" zu sagen).
Als beispiel mal PDO
PHP-Code:
try { $dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $sql = 'SELECT * from oiugds'; foreach ($dbh->query($sql) as $row) { print_r($row); } $dbh = null; } catch (PDOException $e) { print $sql; print " | Error: " . $e->getMessage() . "<br/>"; die(); }
und ich erhalte die Fehlermeldung
SELECT * from oiugds | Error: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.oiugds' doesn't exist<br/>
p.s.: Es kann natürlich auch sein, dass $result ein Objekt ist und mit mysql_fetch_* überhaupt nichts zu tun hat.
Das kannst Du mit einem var_dump($result); for der mysql_fetch_* Zeile herausfinden.
Geändert von defabricator (06.09.2007 um 00:34:52 Uhr)
|
06.09.2007, 00:59:38
|
Member
|
|
Registriert seit: Aug 2005
Beiträge: 644
|
|
AW: DELETE Problem
Haben denn DELETE Querys überhaupt einen Rückgabewert?
Wenn ja könntest du es ja in etwas so machen:
Code:
'SELECT ID, (DELETE FROM cmssections WHERE ID = ' . $ID . ' ) as delqry FROM cmssections WHERE parentid=' . $ID . 'AND delqry=true'
|
06.09.2007, 15:46:35
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: DELETE Problem
Morgen.
Also
PHP-Code:
var_dump($result);
wirft nichts aus. Rein garnichts. Meine Klasse zur Verbindung zur Datenbank sieht wie folgt aus:
PHP-Code:
<?php
////////////////////////////////////////////////////////////////////////////////////////
// Class: DbConnector
// Purpose: Connect to a database, MySQL version
///////////////////////////////////////////////////////////////////////////////////////
require_once 'SystemComponent.php';
class DbConnector extends SystemComponent {
var $theQuery;
var $link;
//*** Function: DbConnector, Purpose: Connect to the database ***
function DbConnector(){
// Load settings from parent class
$settings = SystemComponent::getSettings();
// Get the main settings from the array we just loaded
$host = $settings['dbhost'];
$db = $settings['dbname'];
$user = $settings['dbusername'];
$pass = $settings['dbpassword'];
// Connect to the database
$this->link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
register_shutdown_function(array(&$this, 'close'));
}
//*** Function: query, Purpose: Execute a database query ***
function query($query) {
$this->theQuery = $query;
return mysql_query($query, $this->link);
}
//*** Function: getQuery, Purpose: Returns the last database query, for debugging ***
function getQuery() {
return $this->theQuery;
}
//*** Function: getNumRows, Purpose: Return row count, MySQL version ***
function getNumRows($result){
return mysql_num_rows($result);
}
//*** Function: fetchArray, Purpose: Get array of query results ***
function fetchArray($result) {
return mysql_fetch_array($result);
}
//*** Function: close, Purpose: Close the connection ***
function close() {
mysql_close($this->link);
}
}
?>
Nun habt ihr eine grobe vorstellung womit ich eigentlich hier die ganze Zeit arbeite.
Ich habe grade die Lösung gefunden. Einfach wenn man sie kennt. Funktioniert einwandfrei man muss nur die SQL Befehle aufsplitten.
PHP-Code:
function remove_tree($ID) {
$result = $GLOBALS['connector']->query('DELETE FROM cmssections WHERE ID = '.$ID);
$result = $GLOBALS['connector']->query('SELECT ID FROM cmssections WHERE parentid=' . $ID);
while ($section = mysql_fetch_array($result)) {
remove_tree($section[ID]);
}
}
remove_tree($sectionID);
Trotzdem vielen Dank für eure Hilfe.
MfG, Andy
|
06.09.2007, 16:20:44
|
Senior Member
|
|
Registriert seit: Sep 2007
Ort: Potsdam
Alter: 55
Beiträge: 1.020
|
|
AW: DELETE Problem
Zitat:
Zitat von Socrates
Also
PHP-Code:
var_dump($result);
wirft nichts aus. Rein garnichts.
|
Dann wurde es nicht ausgeführt oder Du hast nicht richtig geguckt. var_dump() gibt nie "nichts" aus. Aber wenn das Problem für Dich gelöst ist, soll es mir egal sein.
|
06.09.2007, 20:20:09
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: DELETE Problem
Code:
... parentid=' . $ID . 'AND DELETE ...
Zwischen ' und AND fehlt ein Leerzeichen.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 16:06:02 Uhr.
|