Avatar billede jarret Nybegynder
15. juni 2005 - 18:19 Der er 17 kommentarer og
1 løsning

hvordan tjekker jeg om tabellen eksisterer?

Hvordan tjekker jeg nemmest om en tabel eksistere i en database;

Jeg behøver ikke oprettelses af kontakt til databasen.
Avatar billede nielle Nybegynder
15. juni 2005 - 18:27 #1
Høkermetoden er at lave en:

SELECT *

- på tabellen og så se om dette generere en fejl.

Den pæne metode afhænger af hvilken type database du køre med.
Avatar billede jarret Nybegynder
15. juni 2005 - 18:40 #2
hvordan tjekker jeg om der er fejl?
Avatar billede jarret Nybegynder
15. juni 2005 - 18:40 #3
if....

else..
Avatar billede jarret Nybegynder
15. juni 2005 - 18:41 #4
Jeg har tidligere prøvet med følgende:

if !($row = mysql_fetch_row($svar)== null) echo"den går ikke";   
    else
    {
Avatar billede claus_joergensen Nybegynder
15. juni 2005 - 18:42 #5
pjat, kan ordnes med php og sql

  /*
  * public void checkAndCreate()
  *
  * Checker om tabellerne (SQL) findes
  * og ellers opretter nogle nye
  */
  function checkAndCreate()
  {
    $result = mysql_list_tables("myDatabase");
    $cms_table = "cms";
    $tables = array();

    while ($row = mysql_fetch_row($result)) {
        $tables[] = $row[0];
    }
 
    if(!@in_array($cms_table,$tables))
    {
      $sql = "CREATE TABLE `cms` (
              `cmsID` int(11) NOT NULL auto_increment,
              `strNavn` varchar(255) NOT NULL default '',
              `txtIndhold` text NOT NULL,
              PRIMARY KEY  (`cmsID`),
              UNIQUE KEY `strNavn` (`strNavn`)
            )";
      mysql_query($sql);
      if(mysql_error())
      {
        // Hvis der sker en mysql fejl
          $error = "MySQL Fejl: ".mysql_error();
        echo "<p class=\"error\">".$error."</p>\n";
        return false;
      }
      else
      {
        return true;
      }
    }
    else
    {
      return true;
    }
  }
Avatar billede nielle Nybegynder
15. juni 2005 - 18:44 #6
I PHP og med MySQL:

$TableExist = true;
$result = mysql_query("ELECT * FROM dinTabel") or $TabelExist = false;

- og så kan du iøvrigt efterfølgende få mere information med mysql_error().
Avatar billede nielle Nybegynder
15. juni 2005 - 18:46 #7
claus_joergensen> Du kan sagtens sige pjat, men som sagt afhænger det jo ad databasen, og jeg viste jo ikke noget om det var MySQL eller måske Access vi snakkede om her. :^|
Avatar billede arne_v Ekspert
15. juni 2005 - 18:47 #8
hvis det er i forbindelse med tabel oprettelse så har MySQL en

CREATE TABLE IF NOT EXISTS tabelnavn ...
Avatar billede claus_joergensen Nybegynder
15. juni 2005 - 18:48 #9
nielle

Men er det nu også optimalt af afhænge af en fejl ?
Og på den måde kan du også kun checke en af gangen pr. query.

Ved at bryge mysql_list_tables() checker man på den måde, php designede sproget til man skulle gøre.
Avatar billede claus_joergensen Nybegynder
15. juni 2005 - 18:49 #10
oh, ja. Jeg assumere altid at php = mysql, når der snakkes databaser.

men arne_v's kommando er vist endnu smartere (når man snakker mysql)
Avatar billede nielle Nybegynder
15. juni 2005 - 18:50 #11
Som jeg rent faktisk sagde så var det jo høkermetoden.
Avatar billede claus_joergensen Nybegynder
15. juni 2005 - 18:50 #12
http://se.php.net/mysql_list_tables

SELECT vinder permance mæssigt, og så skal jeg ellers have kodet min funktion om , med det vuns.
Avatar billede nielle Nybegynder
15. juni 2005 - 18:59 #13
Jeg er nu ikke så sikker på at påstanden angående performance holder 100%.

Hvis tabellen rent faktisk eksistere og den er *meget* stor, tager det jo trods alt noget tid for MySQL at beregne:

SELECT count(*) FROM dinMegetStoreTabel
Avatar billede hmortensen Nybegynder
15. juni 2005 - 19:22 #14
SHOW TABLES FROM db LIKE 'tabel'
Avatar billede jarret Nybegynder
15. juni 2005 - 19:28 #15
nielle jeg har prøvet med din løsning. Den skifter ikke til false...
Avatar billede arne_v Ekspert
15. juni 2005 - 19:37 #16
iøvrgt efterhånden som de forskellige database bliver ANSI SQL et eller andet
compliant så kan det gøres med standard SQL:

SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'
Avatar billede jarret Nybegynder
15. juni 2005 - 20:00 #17
Jeg endte med en blanding, så det er vist en deler lægger i et svar...   

        $TableExist = true;

    $svar = mysql_query("SELECT forfatter FROM $navn ");
    if(mysql_error()){
      $TableExist = false;
      }
Avatar billede nielle Nybegynder
15. juni 2005 - 20:12 #18
Svar :^)

Jeg forstår nu ikke helt hvorfor at du ikke kunne for or-varianten til at fungere... :^|
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester