通过阅读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
}
}
我的理念:如果你愿意,e。例如,删除您必须从多个表中删除行的位置。为此,我写了这个小PHP类。删除这些东西时,在许多表中执行了许多mysql查询,因此我需要一种调试方法。
调试信息存储在$ debug中。
$this->debug .= $query."<br/>";
最后,$ debug应该存储在数据库中(在调用类之后有一个“header(”Location:...“)”,所以我无法执行“echo”)。在析构函数中调用对此的DB查询(INFO:查询只是一个虚拟的。所以我可以避免查询语法没有问题):
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);
问题: 析构函数中似乎没有数据库连接,因为我一直得到这个错误:
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工作正常。
谢谢!
答案 0 :(得分:0)
除非您明确调用__destruct()
函数或非常密切地处理对象的引用并确切知道何时取消设置,否则无法保证语言将调用__destruct()
。在调用它时,语言已经释放了与数据库连接的资源。 mysql_query()
尝试使用默认服务器参数创建新连接,但由于没有空白用户,因此无法执行此操作。
要可靠地记录您的信息,您需要明确地进行调用以运行查询。如果您依赖__destruct()
,可能会遇到类似于您所遇到的问题。