prüfen ob ein Tabellen Eintrag schon exisitiert.

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
chris1278
Mitglied
Beiträge: 4018
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

prüfen ob ein Tabellen Eintrag schon exisitiert.

Beitrag 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.
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1334
Registriert: 13.01.2020 21:09
Kontaktdaten:

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

Beitrag 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.
Kein Support über PN!
Benutzeravatar
IMC
Mitglied
Beiträge: 795
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

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

Beitrag von IMC »

Dafür gibt es eine passende Methode.
https://area51.phpbb.com/docs/code/3.3. ... ble_exists
Gruß, Thorsten

Meine Extensions
Benutzeravatar
chris1278
Mitglied
Beiträge: 4018
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

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

Beitrag 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';

}
Benutzeravatar
IMC
Mitglied
Beiträge: 795
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

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

Beitrag 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.
Gruß, Thorsten

Meine Extensions
Benutzeravatar
chris1278
Mitglied
Beiträge: 4018
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

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

Beitrag von chris1278 »

Ja ist nur für mich . Das skript als solches wird auch net komplett veröffentlicht.
Antworten

Zurück zu „Coding & Technik“