PDA

Bekijk Volledige Versie : toch nog een probleem met controle op aanmaken tabel (PHP en MYSQL)



Matthijs de Z
30/09/05, 17:55
Hoi,

laatst vroeg ik naar een oplossing voor het controleren of een tabel al
bestaat en als dat niet het geval is, dat deze dan wordt aangemaakt. Ik moet
alleen dan wel de tickercode opvangen en klaarzetten om op het scherm af te
drukken en door te sturen per email.

Nu had ik dit:

$dbtickercode = //verandert constant door de lus waar deze code zich in
bevindt

$nieuweTabel="CREATE TABLE IF NOT EXISTS $dbtickercode (
datum INT(8) NOT NULL,
open DECIMAL(12,2) NOT NULL,
high DECIMAL(12,2) NOT NULL,
low DECIMAL(12,2) NOT NULL,
close DECIMAL(12,2) NOT NULL,
volume INT(12) NOT NULL,
PRIMARY KEY (datum)
)";

$maakNieuweTabel = mysql_query($nieuweTabel) or die("<br>godver de godver
de godverrrrrr!<br>".mysql_error());

//als er een tabel aan is gemaakt, dan doen we nog even wat
if($maakNieuweTabel)
{
echo"Er is een nieuwe tabel aangemaakt: $dbtickercode<br>";
//straks ook de tabelnamen die zijn aangemaakt opvangen, om buiten de lus
per email te versturen
$MaakNieuweTabel=false;
}

nou dacht ik dat die if($maakNieuweTabel) controle afdoende zou zijn, maar
die is volgens mij altijd "true", omdat de MySQL_query het ook prima vind om
if not existS uit te voeren.

Als ik het script voor het eerst over een lege database heb gedraait, dan
worden de tabellen aangemaakt en krijg ik de melding Er is een nieuwe tabel
aangemaakt: $dbtickercode op het scherm. Maar als ik vervolgens het script
nog een keer draai (en er GEEN tabellen meer aangemaakt hoeven te worden),
krijg ik precies hetzelfde scherm.

Dit doet mij vermoeden dat $maakNieuweTabel dus altijd een true achtige
waarde heeft. Klopt dat in dit geval? En iemand een idee hoe ik het kan
oplossen zonder weer een extra query te maken met een select er in die eerst
gaat zoeken naar de tabel en als dat niet kan, dat er dan een tabel
aangemaakt wordt.
Groeten,

Matthijs

Matthijs de Z
30/09/05, 17:55
Excuseer de teksten bij or die()...die was ik even vergeten weg te halen
voor de posting..

Matthijs de Z
30/09/05, 22:55
> > $MaakNieuweTabel=false;
>
> $maakNieuweTabel != $MaakNieuweTabel

tja, dat is waar. Typefoutje..

> > nou dacht ik dat die if($maakNieuweTabel) controle
> > afdoende zou zijn, maar die is volgens mij altijd "true",
> > omdat de MySQL_query het ook prima vind om if not existS
> > uit te voeren.
>
> Klinkt op zich best logisch. Je query mislukt namelijk niet
> ofzo, hij wordt alleen niet uitgevoerd.
>
> > Als ik het script voor het eerst over een lege database
> > heb gedraait, dan worden de tabellen aangemaakt en krijg
> > ik de melding Er is een nieuwe tabel aangemaakt:
> > $dbtickercode op het scherm. Maar als ik vervolgens het
> > script nog een keer draai (en er GEEN tabellen meer
> > aangemaakt hoeven te worden), krijg ik precies hetzelfde
> > scherm.
>
> Misschien een kolom uit $dbtickercode selecteren i.c.m. het
> @-teken? Is een quick&dirty-oplossing, maar die retourneert
> denk ik wel false wanneer de tabel niet bestaat :)
>
> Trouwens, werkt 'SHOW TABLES [[FROM dbname] LIKE
> 'tablename']' in jouw versie van MySQL?

Vast wel. Ik draai versie 4.1 nog wat geloof ik. Misschien dat ik met je
suggestie morgen een oplossing weet te vinden. Het is in ieder geval weer
een duwtje naar een andere hoek, waar wellicht een antwoord op het probleem
te vinden is.
Groeten,

Matthijs

finalwebsites.com
01/10/05, 10:55
Matthijs,

in je laatste thread heb je gepost dat een normale manier van data
model (one2mnay) door jouw niet gebruikt wordt omdat je de quick and
dirty methode de voorkeur geeft.

Dit was je keuze omdat je denkt dat je eigen manier eenvoudiger is. Nu
zit je in de begin fase en je hebt al problemen die niet zouden bestaan
op de manier die iedereen hier zou voorstellen. Mijn advies is, begin
met een nieuw goed data model. Dit zou niet het laatste probleem zijn
plus dat het achteraf voor jou als beginner steeds moelijker word de
data te selecteren (denk maar erover na hoe je van de data een chart
zou willen maken, of zelf twee charts tegelijk van 2 aandelen)


gr. Olaf
Maak kans op een gratis kaartje voor de PHP conferentie 2005...
http://www.finalwebsites.com/php_conferentie.php

Matthijs de Z
01/10/05, 11:15
> in je laatste thread heb je gepost dat een normale manier van data
> model (one2mnay) door jouw niet gebruikt wordt omdat je de quick and
> dirty methode de voorkeur geeft.
>
> Dit was je keuze omdat je denkt dat je eigen manier eenvoudiger is. Nu
> zit je in de begin fase en je hebt al problemen die niet zouden bestaan
> op de manier die iedereen hier zou voorstellen. Mijn advies is, begin
> met een nieuw goed data model. Dit zou niet het laatste probleem zijn
> plus dat het achteraf voor jou als beginner steeds moelijker word de
> data te selecteren (denk maar erover na hoe je van de data een chart
> zou willen maken, of zelf twee charts tegelijk van 2 aandelen)

Ik ga dit weekend nog eens even nadenken....
Groeten,

Matthijs








>
>
> gr. Olaf
> Maak kans op een gratis kaartje voor de PHP conferentie 2005...
> http://www.finalwebsites.com/php_conferentie.php
>