stackoverflow を読んで、ほとんどすべての問題を解決しました。しかし今、私は説明できない非常に「特別な」ものを手に入れました。何時間もグーグルで調べたり調べたりしましたが、解決策はありません。
クラス:
class Beitrag_Loeschen {
private $debug;
private $do_debug;
function __construct() {
$this->do_debug = TRUE;
}
function __destruct() {
if ($this->do_debug == TRUE) {
mysql_query("INSERT INTO `seite_log` (`id`, `timestamp`, `benutzer_ip`, `benutzer_id`, `datei`, `referrer`, `fehler`, `kommentar`) VALUES (NULL, UNIX_TIMESTAMP(), '', 1, '', '', '', '')");
}
}
private function _deleteDir($dir) {
// more code
}
// SQL-Query
private function _queryDelete($tabelle, $spalte, $id) {
$query = "DELETE FROM `".sql($tabelle)."` WHERE `".sql($spalte)."`='".sql($id)."';";
mysql_query($query);
$this->debug .= $query."<br/>";
}
private function _queryDeleteKat($tabelle, $kat, $kat_id) {
$query = "DELETE FROM `".sql($tabelle)."` WHERE `kat`='".sql($kat)."' AND `kat_id`='".sql($kat_id)."'";
mysql_query($query);
$this->debug .= $query."<br/>";
}
private function _seiteSuchbegriffe($ergebnis_typ, $ergebnis_id) {
$query = "DELETE FROM `seite_suchbegriffe` WHERE `ergebnis_id`='".sql($ergebnis_id)."' AND `ergebnis_typ`='".sql($ergebnis_typ)."'";
mysql_query($query);
$this->debug .= $query."<br/>";
}
// Kommentare
function bewertungKommentar($id) {
$this->_queryDelete('bewertungen_kommentare', 'id', $id); // bewertungen_kommentare
}
function fotoKommentar($id) {
$this->_queryDelete('fotos_kommentare', 'id', $id); // fotos_kommentare
}
function rezeptKommentar($id) {
$this->_queryDelete('rezepte_kommentare', 'id', $id); // rezepte_kommentare
}
// Bewertung
function bewertung($id) {
$this->_queryDelete('bewertungen_burger', 'id', $id); // bewertungen_burger
$this->_queryDelete('bewertungen_kommentare', 'bewertung_id', $id); // bewertungen_kommentare
// more code
}
// Foto
function foto($id) {
$this->_queryDelete('fotos_kommentare', 'foto_id', $id); // fotos_kommentare
// more code
}
// Burger
function burger($id) {
$this->_queryDelete('burger', 'id', $id); // burger
$this->_queryDeleteKat('benutzer_aktionen', 'favorit_burger', $id); // benutzer_aktionen
// more code
}
// Lokalität
function lokalitaet($id) {
$this->_queryDeleteKat('seite_korrekturen', 'lokalitaet', $id); // seite_korrekturen
$this->_queryDeleteKat('seite_hits', 'lokalitaeten', $id); // seite_hits
// more code
}
}
私のコンセプト:たとえば、場所を削除したい場合は、いくつかのテーブルから行を削除する必要があります。この目的のために、私はこの小さな PHP クラスを作成しました。ものを削除している間、多くのテーブルで多くの mysql クエリが実行されるため、デバッグする方法が必要でした。
デバッグ情報は $debug に保存されます。
$this->debug .= $query."<br/>";
最後に、$debug をデータベースに保存する必要があります (クラスを呼び出した後、"header("Location: ...")" があるため、"echo" を実行できませんでした)。このための DB クエリは、デストラクタで呼び出されます (情報: クエリは単なるダミーです。したがって、クエリ構文に問題がないことを回避できます)。
function __destruct() {
if ($this->do_debug == TRUE) {
mysql_query("INSERT INTO `seite_log` (`id`, `timestamp`, `benutzer_ip`, `benutzer_id`, `datei`, `referrer`, `fehler`, `kommentar`) VALUES (NULL, UNIX_TIMESTAMP(), '', 1, '', '', '', '')");
}
}
クラスは次のように呼び出されます。
$del = new Beitrag_Loeschen();
$del->bewertungKommentar($id);
//header("Location: ".$referer);
問題: デストラクタ内に db 接続がないようです。これは、常にこのエラーが発生するためです。
Warning: mysql_query() [function.mysql-query]: Access denied for user ''@'localhost' (using password: NO) in /[...]/classes/beitrag_loeschen.inc.php on line 12
Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /[...]/classes/beitrag_loeschen.inc.php on line 12
(12 行目はデストラクタの mysql_query です)
私は何を間違っていますか?クラス内の他の mysql_querys は完全に機能しています。
ありがとうございました!