Tabelle in einer db suchen - wenn nicht vorhanden dann CREATE

Flextone

Erfahrenes Mitglied
Hi,

ich kämpfe mir einen ab und ich finde nicht das was ich suche im Internet. mein Buch gibt auch nicht ganz das was ich suche wieder.

also:

Ich will in einer db eine Tabelle suchen. Wenn diese vorhanden ist gibts eine 1 ansonsten eine 0. Gibts ne 0 wird ne tabelle via CREATE erstellt.

Das klappt auch. Nur wenn ich 2 oder 40 mal Refresh drücke kommt der gleiche Text.

"installier" normal muss dann noch nen Fehler kommen.

Kann mir wer helfen?

DANKE!

PHP:
function kommentare () {
	$dbname = 'blog';
	$result = mysql_list_tables($dbname);
	if ($result == 'VIEWS'){
		$search = "1";
	} else {
		$search = "0";
	}
	if($search == "0"){
		mysql_select_db("blog");
		$sqlab = "CREATE TABLE `kommentare` (`id` INT NOT NULL ,`email` VARCHAR( 255 ) ,`webseite` VARCHAR( 255 ) ,`name` VARCHAR( 255 ) ,`nachname` VARCHAR( 255 ) ,`passwort` VARCHAR( 255 ) ,`login` VARCHAR( 255 ) ,`css` VARCHAR( 255 ) ,PRIMARY KEY ( `id` )) TYPE = MYISAM ";
		mysql_query($sqlab);
		$info = "Tabelle -KOMMENTARE- wurde installiere<br />";
	}else{
		$info = "Es trat ein Fehler auf";
	}
	echo $info;
	}
 
ok ich verstehe den einen Teil das ich das Create um den Zusatz if not exists erweiter.
Nur wie bekomme ich es hin das ich anstatt einer "0" eine "1" (für tabelle vorhanden) hinbekomme und damit wird keine Tabelle Created, sondern zb:
PHP:
$error "Datenbank vorhanden.";
 
Wie bereits erwähnt, liefert die mysql_list_tables()-Funktion nur eine MySQL-Ergebnisressource. Dies mit der Zeichenkette „VIEWS“ verglichen, ergibt wahrscheinlich immer ein unwahr. Und daher wird auch immer versucht, die Datenbank zu erstellen.
 
PHP:
	## KOMMENTARE
	function kommentare () {
	$tabelle = 'kommentare';
	$result = mysql_query($tabelle);
	
	if (!$result){
		$search = "0";
	}elseif(isset($result)){
		$search = "1";
	}
	
	if($search == "0"){
		mysql_select_db("blog");
		$sqlab = "CREATE TABLE IF NOT EXISTS `kommentare` (`id` INT NOT NULL ,`email` VARCHAR( 255 ) ,`webseite` VARCHAR( 255 ) ,`name` VARCHAR( 255 ) ,`nachname` VARCHAR( 255 ) ,`passwort` VARCHAR( 255 ) ,`login` VARCHAR( 255 ) ,`css` VARCHAR( 255 ) ,PRIMARY KEY ( `id` )) TYPE = MYISAM ";
		mysql_query($sqlab);
		$info = "Tabelle -KOMMENTARE- wurde installiere<br />";

	}else{
	$info = "Es trat ein Fehler auf";
	}
	echo $info;
	}
	echo kommentare();

Ich bekomme einfach immer das Installiert ausgegeben.
 
Wie ebenfalls schon erwähnt, ist der Rückgabewert der mysql_list_tables()-Funktion wie eine ganz gewöhnliche MySQL-Datenbankabfrage zu behandeln.
Aber ich lese gerade auf der Referenzseite der mysql_list_tables()-Funktion, dass die SHOW TABLES-Anweisung der Funktion vorgezogen werden sollte. Also etwa:
PHP:
function kommentare()
{
	mysql_select_db('blog');
	$query = 'SHOW TABLES';
	$result = mysql_query($query);
	$flag = false;
	while( $table = mysql_result($query, 0) ) {
		if( $table == 'kommentare' ) {
			$flag = true;
			break;
		}
	}
	if( !$flag ) {
		$query = 'CREATE TABLE `kommentare` (`id` INT NOT NULL ,`email` VARCHAR( 255 ) ,`webseite` VARCHAR( 255 ) ,`name` VARCHAR( 255 ) ,`nachname` VARCHAR( 255 ) ,`passwort` VARCHAR( 255 ) ,`login` VARCHAR( 255 ) ,`css` VARCHAR( 255 ) ,PRIMARY KEY ( `id` )) TYPE = MYISAM ';
		mysql_query($query);
	}
	return $flag;
}
 
ne was anderes nun kommt:

Warning: mysql_result(): supplied argument is not a valid MySQL result resource in L:\__WEBSERVER\apachefriends\xampp\htdocs\projekte\weblog\install.php on line 10

das ist diese stelle

while( $table = mysql_result($query, 1) ) {
 
Welchen Wert liefert denn die Funktion zurück? Wird die Tabelle auch dann nicht erstellt, wenn du sie manuell löschst? Arbeite mal zur Fehleranalyse zusätzlich mit der or die(…)-Fehlerbehandlung.
 
Zurück