# PHP/MySQL | überprüfen ob Tabelle existiert



## Experience1986 (29. April 2003)

Hi,

Wie kann ch mit PHP prüfen, ob eine MySQL Tabelle einer Datenbank besteht?

Also so nach dem modell:

if (tabbeleisda)
{ echo "Tabelle ist da"; }
else { echo "nicht da "; }


Wie kann man sowas machen, ich hatte schon in der mysql Documentation geschaut, aber da fand ich nur was mit create table if not exist... 

Das soll aber nicht abwärts kompatibel zu alten mysql DB's sein. Und Zudem weis ich nicht, wie ich daraus einen Wert bekommen kann, was denn nun geschehen ist (OK/Fehlgeschlagen).

Vielen Dank schonmal im voraus.


----------



## Flo<H> (29. April 2003)

Was mir jetzt so auf die schnelle einfällt wäre, dass du einfach eine mysql-Abfrage startest und überprüfst ob diese richtig durchgeführt wurde:

```
<?php
// Verbindung zur mysql_Datenbank
$result = mysql_query("SELECT * FROM tabelle");
if($result)
{
   echo "Tabelle existiert.";
}
else
{
   echo "Tabelle existiert nicht.";
}
```

So ungefähr.

EDIT:
Gerade ist mir ne zweite Möglichkeit eingefallen:
Man kann sich mit mysql_list_tables die Namen der Tabellen die in einer Datenbank enthalten sind ausgeben lassen. Jetzt musst du nur noch vergleichen ob da deine Tabelle dabei ist.


----------



## Matthias Reitinger (29. April 2003)

Noch eine Möglichkeit:

```
$result = mysql_query("SHOW TABLES LIKE 'tabelle'");
if (mysql_num_rows($result) > 0) {
  echo "Tabelle ist da.";
} else {
  echo "Tabelle ist nicht da.";
}
```


----------



## Experience1986 (30. April 2003)

Danke für alle Antworten, das letzte hat funktioniert, das andere habe ich nicht getestet, zudem kann es da doch auch zu einem fehler kommen, wenn die tabelle da ist, aber keine felder drin hat, oder?


----------



## Papenburger (20. Februar 2007)

Es gibt auch die Funktion ifexist in MySQL...


----------



## tobee (3. April 2007)

Ist zwar ein altes Thema, aber die ifexist Funktion kenn ich gar nicht.
Ist die nicht dokumentiert?


----------



## Flex (3. April 2007)

Das ist eine Kombination aus IF und EXISTS.
IF Statement
EXISTS und NOT EXISTS


----------



## Papenburger (4. April 2007)

Weiß jemand warum PHP die Tabelle nicht erstellt?


```
include("data.php");

$sql1="CREATE TABLE IF NOT EXISTS `SV_LINKVERWALTUNG`
     (`id` int(255) NOT NULL auto_increment,
      `linkname` varchar(50) NOT NULL,
      `url` text NOT NULL,
      PRIMARY KEY  (`id`))
      ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=23";

$db_connection=db_connect();
$result = mysql_query($sql1);
db_disconnect($db_connection);
```
in der data.php sind die Zugangsdaten zur DB und dort wird auch über die Funktion db_connect() zur DB verbunden...


MFG
Papenburger


----------



## tobee (4. April 2007)

Gibt es denn eine mysql_error() Fehlermeldung?
Setze mal den error_reporting auf E_ALL und schau, ob er eine Fehlermeldung ausgibt

```
error_reporting(E_ALL);
```


----------



## Papenburger (4. April 2007)

tobee hat gesagt.:


> Gibt es denn eine mysql_error() Fehlermeldung?
> Setze mal den error_reporting auf E_ALL und schau, ob er eine Fehlermeldung ausgibt
> 
> ```
> ...



Leider gibt der nichts aus...


----------



## tobee (4. April 2007)

Also, in meinem phpMyAdmin führt er das SQL Statement aus.
Welche SQL Version hast du denn?


----------



## Papenburger (4. April 2007)

tobee hat gesagt.:


> Also, in meinem phpMyAdmin führt er das SQL Statement aus.
> Welche SQL Version hast du denn?



Im SQL Statement führt er das bei mir auch aus. Er macht das nur nicht bei dem PHP-Script...
MySQL - 5.0.18


----------



## tobee (4. April 2007)

Kannst du mal den Quellcode der db_connect Funktion posten.
Ich glaub nicht dass du die db2_connect Funktion meinst?
Ansonsten heißt der Code so:

```
$db = mysql_connect("localhost","root","****") or die ("connect");
mysql_select_db("table",$db) or die ("select db");
```


----------



## Papenburger (4. April 2007)

tobee hat gesagt.:


> Kannst du mal den Quellcode der db_connect Funktion posten.
> Ich glaub nicht dass du die db2_connect Funktion meinst?
> Ansonsten heißt der Code so:
> 
> ...





```
function db_connect()
{
        $dbserver="****";
        $dbuser="****";
        $dbpass="****";
        $dbname="****";

        $db = mysql_connect ($dbserver,$dbuser, $dbpass) or die("Es konnte keine Verbindung hergestellt werden!");
        mysql_select_db($dbname) or die("Auswahl der Datenbank fehlgeschlagen!");
        return($db);
}
```


----------



## tobee (4. April 2007)

Ändert sich was wenn du die Zeile änderst, außer meiner Veränderung ?

```
mysql_select_db($dbname,$db) or die("Auswahl der Datenbank fehlgeschlagen!");
```


----------



## Papenburger (4. April 2007)

Nein. Ich habe die Zugangsdaten einmal geändert. Der gibt auch keine Fehlermeldung aus...

Das heißt der kann noch nicht mal zur DB connecten!


----------



## tomx992 (4. April 2007)

Hallo,

also ich kenn nur folgende Prüfung ob ein FELD in der tabelle existiert:


```
<?php 
//Datenbank Connect Daten 
$database= "dbname";       //Datenbankname 
$sqlhost= "localhost";     //mySQL Hostname 
$sqluser= "dbuser";        //mySQL Username 
$sqlpass= "dbpass";        //mySQL Passwort 

//Verbindung herstellen 
$serverid  = @mysql_connect  ( $sqlhost, $sqluser, $sqlpass) or 
             die ("Verbindung zur Datenbank nicht möglich !"); 
if (!mysql_select_db( $database))  echo mysql_error($serverid); 


function mysql_field_exist($db,$table,$field,$serverid) { 
    $fields = mysql_list_fields($db, $table, $serverid); 
    $columns = mysql_num_fields($fields); 
    $found = 0; 
    for ($i = 0; $i < $columns; $i++) { 
        if ( trim($field) == trim(mysql_field_name($fields, $i)) ) $found = 1; 
       } 
       return $found; 
} 

//Prüfen ob das Feld id in der Tabelle powie_pfuser existiert ! 
echo mysql_field_exist($database,"powie_pfuser","id",$serverid); 
?>
```

gruß

tom


----------



## Papenburger (4. April 2007)

Ich will ja nicht prüfen ob ein Feld in der Tabelle existiert sondern ob die Tabelle selber schon existiert und dann via PHP anlegen...

Das geht irgendwie aber ich weiß nur nicht mehr ganz wie...


----------



## tomx992 (4. April 2007)

versuch mal mysql_list_tables() - Listet Tabellen in einer MySQL Datenbank auf


```
<?php
$dbname = 'mysql_dbname';

if (!mysql_connect('mysql_host', 'mysql_user', 'mysql_password')) {
   echo 'Keine Verbindung zur Datenbank möglich';
   exit;
   }

$result = mysql_list_tables($dbname);
   
if (!$result) {
   echo "DB Fehler, Tabellen können nicht angezeigt werden\n";
   echo 'MySQL Fehler: ' . mysql_error();
   exit;
}

while ($row = mysql_fetch_row($result)) {
   echo "Tabelle: $row[0]\n";
}

mysql_free_result($result);
?>
```


----------



## Papenburger (4. April 2007)

ich habe nun folgendes:


```
include ("data.php");

$sql1="CREATE TABLE IF NOT EXISTS `SV_LINKVERWALTUNG` (
  `id` int(255) NOT NULL auto_increment,
  `linkname` varchar(25) NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

$db_connection=db_connect();
$result = mysql_fetch_array($sql1);
db_disconnect($db_connection);

echo error_reporting("E_ALL");
```
Da gibt der mir folgendes aus:


> *Warning:*  mysql_fetch_array(): supplied argument is not a valid MySQL result resource in */usr/local/nagios/share/tools/install.php* on line *19*
> 2039


Die 2039 kommt vom Error-Reporting...


----------



## Flex (4. April 2007)

Was sagt denn [phpf]mysql_error[/phpf]?


----------



## Papenburger (4. April 2007)

*Warning*:  mysql_error(): supplied argument is not a valid MySQL-Link resource in */usr/local/nagios/share/tools/install.php* on line *20

In Zeile 20 steht aber: echo mysql_error($result);


Hier der Code:
*

```
$sql="CREATE TABLE IF NOT EXISTS `SV_LINKVERWALTUNG` (
  `id` int(255) NOT NULL auto_increment,
  `linkname` varchar(25) NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

$db_connection=db_connect();
$result = mysql_query($sql);
echo mysql_error($result);
db_disconnect($db_connection);
```


----------



## tobee (4. April 2007)

Mach das mal bitte so:
	
	
	



```
echo error_reporting(E_ALL);
```
Und das hier so:
	
	
	



```
$result = mysql_query($sql,$db_connection);
```
Ändert sich was?


----------



## Papenburger (4. April 2007)

Dann kommt da nur die Zahl 2039


----------



## tobee (4. April 2007)

Warum 2039?
Weil man anstatt E_ALL ^ E_NOTICE auch 2039 als Parameter bei error_reporting übergeben kann. 
Deshalb bitte die Funktion *ohne* Echo und *ohne* Anführungsstriche.


----------



## Papenburger (4. April 2007)

Dann wird garnichts mehr angezeigt und die Tabelle wird auch nicht erstellt.


----------



## tobee (4. April 2007)

Also ich würde mal den mysql_connect und den mysql_select_db aus der Funktion auslagern und in die install.php Datei öben einfügen. Dann kann man schauen ob es an der Funktion liegt, an der Datenbank selbst oder ähnliches.


----------



## Papenburger (4. April 2007)

Nun hab ich folgendes:

```
<?
$dbserver="localhost";
$dbuser="dbuser";
$dbpass="dbpass";
$dbname="dbname";

$db = mysql_connect ($dbserver,$dbuser, $dbpass) or die("Es konnte keine Verbindung hergestellt werden!");
mysql_select_db($dbname) or die("Auswahl der Datenbank fehlgeschlagen!");

        
$sql="CREATE TABLE IF NOT EXISTS `SV_LINKVERWALTUNG` (
  `id` int(255) NOT NULL auto_increment,
  `linkname` varchar(25) NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

$result = mysql_query($sql,$db_connection);
error_reporting(E_NOTICE);
?>
```


Da kommt folgende Fehlermeldung:


> *Warning*:  mysql_query(): supplied argument is not a valid MySQL-Link resource in */usr/local/nagios/share/tools/install.php* on line *26*


----------



## tobee (4. April 2007)

```
<?php
error_reporting(E_ALL);

$dbserver="localhost";
$dbuser="dbuser";
$dbpass="dbpass";
$dbname="dbname";

$db = mysql_connect ($dbserver,$dbuser, $dbpass) or die("Es konnte keine Verbindung hergestellt werden!");
mysql_select_db($dbname,$db) or die("Auswahl der Datenbank fehlgeschlagen!");

$sql="CREATE TABLE IF NOT EXISTS `SV_LINKVERWALTUNG` (
  `id` int(255) NOT NULL auto_increment,
  `linkname` varchar(25) NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";
var_dump ( $result = mysql_query($sql) );
?>
```


----------



## Papenburger (4. April 2007)

Jetzt legt er die Tabelle an. Wenn du mir auch noch verraten könntest wie ich mehrer Anweisungen übergeben kann, also:


```
$sql1="CREATE TABLE IF NOT EXISTS `SV_LINKVERWALTUNG` (
  `id` int(255) NOT NULL auto_increment,
  `linkname` varchar(25) NOT NULL,
  `url` text NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1";

$sql2="INSERT INTO `SV_LINKVERWALTUNG` (`id`, `linkname`, `url`) VALUES
       (1, 'Test1', 'Test1'),
       (2, 'Test2', 'Test2'),
       (3, 'Test3', 'Test3')";

$sql=array($sql1, $sql2);
var_dump ( $result = mysql_query($sql));
```


----------



## Papenburger (4. April 2007)

Hat sich grad erledigt...
Habs schon!

Danke für deine Hilfe!


----------

