Seite 1 von 1

SQL Abfrage nach PHPBB-Stil...

Verfasst: 16.08.2003 14:52
von cloud7
Hi Modder!

Nach installieren von einigen modds und auch selbst erweitern meines PHPBBs möcht ich nun selbst ein MOD schreiben.
Nun hab ich aber gesehen, dass PHPBB eine andere mysql abfrage technik benutzt als ich und ich möchte das möglichst kompatibel machen... *g*

Deswegen nun meine Frage: Wie erstelle ich eine SQL abfrage im PHPBB stil und wie erkenne ich im code ob eine connection noch offen ist, oder ob ich noch eine machen muss? (die abfrage wär im usercpp_register.php unter der Zeile: "$message = $lang['Account_added'];")

Bisher ist mir nebst der -verlateten- mysql_db_query folgende mysql abfragemöglichkeit geläufig:


(Beispiel)

Code: Alles auswählen

@mysql_connect($dbHost, $dbUser, $dbPass)
  or die("Abbruch: Verbindung zu '$dbHost' konnte nicht hergestellt werden.");
@mysql_select_db($sdbName)
  or die("Abbruch: Datenbank '$sdbName konnte nicht selektiert werden.<br><br>MySQL sagt: ".mysql_error());

$GetUId = "SELECT user_id FROM tblBBusers WHERE username = '$username' AND user_password = MD5('$password')";
$UId = mysql_query($GetUId);
mysql_close();
list($userId) = mysql_fetch_row($UId);
tnx schonmal,

Verfasst: 16.08.2003 15:35
von PhilippK
Meist hilft da, ein paar Zeilen des phpBB-Codes anzuschauen. Alle DB-Abfragen gehen über eine DataBase Abstraction Layer (DBAL), um möglichst große Unabhängigkeit vom verwendeten Datenbank-System zu erhalten. Sbei brauchst du dir i.d.R. keine Gedanken über eine bestehende DB-Verbinung machen - das macht die DBAL für dich...

Ansonsten:
http://cvs.sourceforge.net/cgi-bin/view ... xt?rev=1.1
http://cvs.sourceforge.net/cgi-bin/view ... tm?rev=1.3

Gruß, Philipp

Verfasst: 16.08.2003 15:50
von cloud7
hmm, klingt etwas kompliziert...

Wie würde denn ein Beispiel meiner obiegen abfrage so aussehen?

Verfasst: 17.08.2003 01:29
von PhilippK
Versuchen wir's mal:

Code: Alles auswählen

// Grundgerüst - in diesem Fall für 'ne Datei im phpBB-Hauptverzeichnis.
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

// mysql_connect und mysql_select_db entfallen
// SQL-Abfrage. Idealerweise sollte die Tabelle als Konstante (aus der constants.php) angegeben werden
$sql = "SELECT user_id
  FROM tblBBusers
  WHERE username = '$username'
    AND user_password = md5('$password')"; 
// Abfrage ausführen
if ( !$result = $db->sql_query($sql) )
{
  message_die(GENERAL_ERROR, 'Could not query data', '', __LINE__, __FILE__, $sql); // phpBB-eigene Fehlerroutine
}
// Datensatz holen
if ( !($row = $db->sql_fetchrow($result)) )
{
  message_die(GENERAL_ERROR, 'Could not query data', '', __LINE__, __FILE__, $sql); // phpBB-eigene Fehlerroutine
}
// Close entfällt

// Die user_id ist nun als $row['user_id'] verfügbar
Gruß, Philipp

hmmm

Verfasst: 30.11.2004 22:22
von cola-junkie
Gut, dann stell ich an dieser Stelle mal eine Frage hinterher:

DB-Abfragen mach ich ja mit folgender Zeile, z.b.

Code: Alles auswählen

sql = "SELECT user_id FROM tblBBusers WHERE username = '$username' AND user_password = md5('$password')";
wie könnte ich denn jetzt erreichen, das er eine Abfrage nicht in der üblichen Datenbank in der phpBB auch liegt, durchführt, sonderen meinetwegen in einer anderen. Soll dann so aussehen:

Code: Alles auswählen

sql_xxx = "SELECT user_id FROM tblBBusers WHERE username = '$username' AND user_password = md5('$password')";
Sprich, wenn die Zeile mit sql = " beginnt, soll er die übliche Datenbank verwenden, und wenn sie mit sql_xxx = " beginnt, dann soll eine andere Datenbank verwendet werden.

Angaben für Tabellennamen sollen trotzdem in der constants.php bzw. für die zweite DB in der config.php stehen.

Schon mal Danke für Eure Hilfe.
Leider bin ich über die Suche nämlich nicht fündig geworden, bzw. kann ich nicht ganz nachvollziehen, wie phpBB die Verbindung zur entsprechenden DB aufbaut.