Seite 1 von 1

prüfen ob ein Tabellen Eintrag schon exisitiert.

Verfasst: 01.09.2025 17:55
von chris1278
Frage ich will mir gerade für eine Ext die ich nutze ein skript schreiben. Dazu mus ich temporär eine Tabelle anlegen.

Ich habe da jetzt mal so angefangen:

Code: Alles auswählen

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);


$sql = 'CREATE TABLE meinetabelle (spaltenname VARCHAR(255));';

$result	= $db->sql_query($sql);
Es funktioniert auch, nur wenn ich das Skript wiederholt ausführe, meldet der ein Fehler, dass die Tabelle schon existiert. Klar.

Wie kann ich mit phpbb prüfen, ob die Tabelle, die ich anlegen möchte, schon da ist. Also in etwa so:

Code: Alles auswählen


if (tabele da)
{
	weiter ohne was zu machen
}
else
{
	ist nicht da also anlegen
}
Sofern so eine Abfrage überhaupt in phpbb vorhanden ist.

Re: prüfen ob ein Tabellen Eintrag schon exisitiert.

Verfasst: 01.09.2025 19:09
von Mike-on-Tour
Z.B. mit der Abfrage: SHOW TABLES LIKE 'meinetabelle'
Liefert ein Ergebnis, wenn die Tabelle existiert, nämlich ein assoziatives Array mit dem gesuchten Tabellennamen als Wert, ansonsten false.
Bitte beachten, dass der Tabellenname casesensitiv ist.

Re: prüfen ob ein Tabellen Eintrag schon exisitiert.

Verfasst: 01.09.2025 19:16
von IMC
Dafür gibt es eine passende Methode.
https://area51.phpbb.com/docs/code/3.3. ... ble_exists

Re: prüfen ob ein Tabellen Eintrag schon exisitiert.

Verfasst: 01.09.2025 19:58
von chris1278
Ok ich hab jetzt ne variante gefunden die läuft.

Mike deines hat den anhaltspunkt gegeben. Allerdings etwas abgeändert.

Hier ein funktionierendes Ergebnis:

Code: Alles auswählen

$sql = 'SHOW TABLES';
$result = $db->sql_query($sql);
$tables = array();
while ($row = $db->sql_fetchrow($result))
{
	$name = current($row);
	$tables[$name] = $name;
}
$db->sql_freeresult($result);


function searchMultiArray($needle, $haystack)
{
    foreach ($haystack as $value)
	{
        if (is_array($value))
		{
            // Wenn der Wert ein Array ist, rufe die Funktion rekursiv auf
            if (searchMultiArray($needle, $value))
			{
                return true; // Wert gefunden in einem Unterarray
            }
        }
		elseif ($value === $needle)
		{
            // Wenn der Wert direkt gefunden wird
            return true;
        }
    }
    return false; // Wert nicht in diesem Array oder dessen Unterarrays gefunden
}

if (!searchMultiArray('phpbb_config', $tables))
{
    echo 'nicht gefunden also anlegen';

}

Re: prüfen ob ein Tabellen Eintrag schon exisitiert.

Verfasst: 01.09.2025 20:28
von IMC
Wenn du den Code nur für eine selbst genutzte Extension verwendest ist das so in Ordnung.

Aus Kompatibilitätsgründen mit anderen von phpBB unterstützten Datenbanksystemen würde ich persönlich immer auf die Klasse \phpbb\db\tools\tools zurückgreifen. Die bietet alle Möglichkeiten um die Datenbankstruktur anzupassen. Der Code wäre auch etwas kompakter.

Re: prüfen ob ein Tabellen Eintrag schon exisitiert.

Verfasst: 01.09.2025 21:00
von chris1278
Ja ist nur für mich . Das skript als solches wird auch net komplett veröffentlicht.