Controle of tables bestaan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michel Bak

Michel Bak

02/11/2017 21:38:15
Quote Anchor link
Ik heb een stuk html code die alleen maar beschikbaar mag zijn als 2 tables bestaan, bestaat 1 of meer niet dan moet er een ander stuk code beschikbaar worden. Ik heb verschillende codes gebruikt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES
           WHERE TABLE_NAME = N'Customers')


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$tableleden = mysqli_query($connect, "show tables like 'leden'");
$tablelidmaatschap = mysqli_query($connect, "show tables like 'lidmaatschap'");
if ($tableleden && $tablelidmaatschap === true)


of variatie op bovenstaande > 0

en nog een aantal verschillende echter werkt alleen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$pTableExist = mysqli_query($connect, "show tables like 'lidmaatschap'");
    if ($rTableExist = mysqli_fetch_array($pTableExist)) {


Het probleem is dat ik dan alleen maar 1 table kan invoeren. Hoe los ik dit op?
 
PHP hulp

PHP hulp

04/05/2024 15:55:00
 
Thomas van den Heuvel

Thomas van den Heuvel

02/11/2017 21:45:15
Quote Anchor link
Persoonlijk zou ik een andere aanpak kiezen, waarin je je dit niet continu hoeft af te vragen. Bijvoorbeeld door dit onderdeel te maken van een installatieroutine.

En als dit al onderdeel is van een installatieroutine :p zou ik hier CREATE TABLE IF NOT EXISTS <tabelnaam> van maken, zodat, als je de installatieroutine draait dit "non obtrusive" is (of hoe je het ook wilt noemen). En als dat faalt, moet de routine eigenlijk gewoon stoppen / genadeloos op zijn bek gaan.
 
Michel Bak

Michel Bak

02/11/2017 22:20:14
Quote Anchor link
1. Dat snap ik, en als ik het toch op deze manier zou willen doen?

2. Ik heb een db.php die de tables aanmaakt, is er een mogelijkheid om die te gebruiken?
bv: if not exists execute db.php else..........
 
- Ariën  -
Beheerder

- Ariën -

02/11/2017 22:47:49
Quote Anchor link
Ik vraag me af waarom je wilt controleren of er twee tables bestaan? Is er soms een mogelijkheid dat er opeens eentje niet bestaat?

Of als het om een installatie-pakket gaat, dan moet Thomas zijn oplossing zeker voldoen.
 
Adoptive Solution

Adoptive Solution

02/11/2017 22:56:01
Quote Anchor link
Gebaseerd op dit artikel :

https://stackoverflow.com/questions/5609620/show-tables-statement-with-multiple-like-values

deze query in elkaar gezet :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
show tables from mijnDB
where Tables_in_mijnDB like 'leden'
or Tables_in_mijnDB like 'lidmaatschap';


mijnDB is de db waarin de tables voorkomen
Gewijzigd op 02/11/2017 22:56:26 door Adoptive Solution
 
Thomas van den Heuvel

Thomas van den Heuvel

02/11/2017 23:16:32
Quote Anchor link
Dit beantwoordt niet de vraag waarom. Waar komt deze vereiste vandaan? Waarvoor heb je deze nodig?

Een tijd geleden kwam er ook al een soortgelijke vraag voorbij waarin iemand continu wilde controleren of er een databaseverbinding was. Dit terwijl een script slechts enkele milliseconden bestaat waarin een connectie actief is.

Punt is, je moet denk ik af van de situatie waarin het ter discussie staat of de tabellen bestaan. Zorg dat je dit op een of andere manier garandeert, of er simpelweg vanuit gaat.

Dit is zoiets als elke seconde op de klok kijken om te zien of deze wel daadwerkelijk een seconde vooruit gaat.

Overigens, een LIKE zonder wildcards is nogal suf? Doe dan iets als WHERE <kolom voor tabelnamen> IN ('tabelnaam1', 'tabelnaam2') ofzo, maar dan nog, je moet waarschijnlijk af van deze maffe controle :p.
 
Michel Bak

Michel Bak

03/11/2017 11:36:53
Quote Anchor link
Het is voor een opdracht en hierin staat:
Als de tabellen niet bestaan, moet u ook het formulier niet tonen. Er kan immers toch niets worden opgevoerd.

Dus ik zat bij het html gedeelte te denken aan een if else waarin staat: if als ze bestaan show het formulier, else een melding dat het nog niet bestaat.

En deze oplossing, is dat mogelijk?
Ik heb een db.php die de tables aanmaakt, is er een mogelijkheid om die te gebruiken?
bv: if not exists execute db.php else..........
 
Thomas van den Heuvel

Thomas van den Heuvel

03/11/2017 12:51:02
Quote Anchor link
Maar zo wil je toch niet programmeren? Dit zou inhouden dat elke keer wanneer je een tabel zou gebruiken dat je altijd zou moeten controleren of deze bestaat? Je hebt het over een "opdracht"? Is dit voor school of iets anders? Je zou kunnen aanvoeren dat het controleren op een tabel onzinnig is omdat dat soort verantwoordelijkheid apart geregeld zou moeten worden (separation of concerns), bijvoorbeeld in een installatieroutine.

Het lijkt mij beter dat de formulierfunctionaliteit er gewoon van uitgaat dat deze tabel bestaat. Je zou indirect kunnen afhandelen dat deze niet bestaat wanneer je informatie naar een niet-bestaande tabel probeert weg te schrijven (de query mislukt dan, toon gebruiksvriendelijke boodschap, log of mail de error voor de desbetreffende slapende programmeur).

Tenzij er meer informatie gegeven wordt waaruit blijkt dat het controleren op het bestaan van een tabel zinnig is zou ik gewoon de kanttekening plaatsen dat een controle hierop in code voor formulierfunctionaliteit niet de juiste plaats is.

Ik zou ook niet doen alsof deze opdrachten in steen gezet zijn, te meer wanneer er onzinnige dingen van jou verlangd worden. Mogelijk wordt dit gedaan om te kijken hoe je dit programmatisch aanpakt, maar dit schiet zijn doel een beetje voorbij als je hiermee een verkeerde manier van programmeren aanleert :p.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.