Externer Zugriff auf Datenbank, bitte Hilfe eines mysql-Prof

Gesperrt
malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Externer Zugriff auf Datenbank, bitte Hilfe eines mysql-Prof

Beitrag von malsdgtac » Do 29. Jun 2006, 16:45

Hallo,

ich möchte gerne auf einer Website die mit Contenido 4.6.8 bereits läuft Inhalte einer anderen Website die unter 4.4 läuft einbinden.

Dazu habe ich in einem Modul folgende Datenbankverbindung aufgebaut:

Code: Alles auswählen

// Datenbankhost
$hoststmk = 'www.xyz.at';
$dbasestmk = 'xyz';
$userstmk = 'xyz';
$passstmk = 'xyz';

if (!$dbstmk) {
	$dbstmk = mysql_connect($hoststmk,$userstmk,$passstmk);
    mysql_select_db($dbasestmk);
}

if ($dbstmk) {
	echo "Datenbankverbindung<br>";
}

$sql = "SELECT ARTLANG.idart, ARTLANG.title, CATART.idcat, ARTLANG.created, CONTENT.value, CONTENT.idtype, CONTENT.typeid, CAT.parentid 
 FROM xyz_cat_art AS CATART, xyz_art_lang AS ARTLANG, xyz_cat AS CAT, xyz_content AS CONTENT
 WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang=CONTENT.idartlang AND CONTENT.idtype<=5 AND CONTENT.typeid<=15 AND CAT.idcat='65' AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1' AND CATART.is_start='0'
 ORDER BY ARTLANG.title ASC, ARTLANG.created DESC";

echo $sql."<br>";

//$db->query($sql);

$dbstmk = mysql_db_query($dbasestmk, $sql, $dbstmk);

...
Die Abfrage funktioniert auf den entsprechenden Server einwandfrei. Wenn ich dieses Modul jedoch in der entsprechenden Webseite aufrufe, bekomm ich den folgenden Fehler:
Maximum execution time of 30 seconds exceeded in /conlib/db_mysql.inc
Die Datenbankverbindung scheint zu stehen - zumindest wird mir diese ausgegeben. Ich habe aber das Gefühl, dass ich von der Datenbank nichts zurück bekomme.

Von meinen Provider (all-inkl.com) habe ich folgende Information bekommen:
eine externe Verbindung mit der Datenbank auf dem Server bei uns ist generell möglich. Als Host verwenden Sie bitte den Domainnamen, der SQL Port lautet 3306.
Kann mir jemand dabei helfen? Was kann ich mit dem Port noch weiter angeben? Ist das ein Problem, was aufgrund von Contenido entsteht?

Vielen Dank für eure Hilfe.

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Do 29. Jun 2006, 18:07

ähm...

funktioniert das auch standalone ?
sprich als php datei die man direkt aufruft ?

die andere sache ->
Maximum execution time of 30 seconds exceeded in /conlib/db_mysql.inc
hängt vermutlich damit zusammen das du den db zeiger verbogen hast...
die Db_Contenido verwendet ab den zeitpunkt des ausführens deines moduls die dortig definierte db verbindung... (super satz)

es müsste an sich ab version 4.6.x möglich sein auch die db klasse von contenido mit einer anderen db zu nutzen...

müsste in etwa so aussehen...

Code: Alles auswählen

<?php

$host = "server";
$database = "database";
$user = "user";
$pass = "pass";


$db_ext = new DB_Contenido($host, $database, $user, $pass);

echo "<pre>";
print_r($db_ext);
echo "</pre>";

$sql = "SELECT ARTLANG.idart, ARTLANG.title, CATART.idcat, ARTLANG.created, CONTENT.value, CONTENT.idtype, CONTENT.typeid, CAT.parentid 
 FROM xyz_cat_art AS CATART, xyz_art_lang AS ARTLANG, xyz_cat AS CAT, xyz_content AS CONTENT 
 WHERE ARTLANG.idart = CATART.idart AND CATART.idcat = CAT.idcat AND ARTLANG.idartlang=CONTENT.idartlang AND CONTENT.idtype<=5 AND CONTENT.typeid<=15 AND CAT.idcat='65' AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1' AND CATART.is_start='0' 
 ORDER BY ARTLANG.title ASC, ARTLANG.created DESC"; 

$db_ext->query($sql);

while ($db_ext->next_record()) {
    // whatever
}

?>
*** make your own tools (wishlist :: thx)

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Do 29. Jun 2006, 19:24

Hallo emergence,

danke für deine Hilfe. Das hat so auch geklappt. Leider hilft es mir insofern nicht wirklich weiter, als das ich jetzt den folgenden Fehler bekomme:
Fatal error: Allowed memory size of 41943040 bytes exhausted
Ich bin jetzt am überlegen, ob ich die Seiten als include einbinde, XML wäre auch okay. Ich weiß nur noch nicht, wie ich mit Links umgehe.

Es wäre schön, wenn ich für einen Artikel "2 Layouts" anlegen könnte, wovon ich dann eine einbinde, und die andere auf der Originalwebsite anzeige. Aufgrund der URL wird entschieden welches Layout angezeigt wird.

Hast du dazu vielleicht noch eine Idee?

Vielen Dank für deine Hilfe.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Do 29. Jun 2006, 20:58

Das sind 41 MB!!! Da muss aber gehörig was schief laufen...

Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!

Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net

oma wetterwax
Beiträge: 97
Registriert: Do 6. Mai 2004, 07:38
Kontaktdaten:

Beitrag von oma wetterwax » Sa 1. Jul 2006, 01:16

hi smac,

ich bin zwar kein mysql-profi, mir fällt nur auf, dass du mit der anordnung deiner bedingungen dem db-speicher einiges abverlangst - es ist einfach nicht logisch, zuerst die tabellen miteinander zu verknüpfen und dann erst eine auswahl zu treffen und ich denke auch, dass das hin- und herspringen zwischen den tabellen die sache nicht gerade beschleunigt.

ich würde versuchen, zuerst möglichst viel auszuschließen und dann erst zu verknüpfen, etwa so:

Code: Alles auswählen

... WHERE CAT.idcat='65' AND CAT.idcat = CATART.idcat AND CATART.is_start = '0' AND CATART.idart = ARTLANG.idart AND ARTLANG.idlang = '$lang' AND ARTLANG.online = '1' AND ARTLANG.idartlang = CONTENT.idartlang AND CONTENT.idtype <= 5 AND CONTENT.typeid <= 15 ....
vielleicht hilft's
gruß
oma

malsdgtac
Beiträge: 717
Registriert: Fr 12. Mär 2004, 15:50
Kontaktdaten:

Beitrag von malsdgtac » Sa 1. Jul 2006, 13:16

Vielen Dank für eure Hilfe und Antworten.

Ich habe mich jetzt dazu entschieden, die fertigen HTML-Seiten einzulesen, und dann nur den Inhalt in der neuen Webseite auszugeben, der für mich relevant ist.

Ist zwar wahrscheinlich nicht die schnellste Variante, hat aber im nachhinein gesehen ein paar Vorteile für uns.

Das mit der geänderten Abfrage habe ich aber trotzdem umgestellt, schadet ja nicht ;-)

Gesperrt