2013-05-14 5 views
10

Ich habe den folgenden Code:CREATE TABLE IF NOT mit Tabelle ist bereits vorhanden nicht vorhanden

$db_host = 'localhost'; 
$db_port = '3306'; 
$db_username = 'root'; 
$db_password = 'root'; 
$db_primaryDatabase = 'dsl_ams'; 

// Connect to the database, using the predefined database variables in /assets/repository/mysql.php 
$dbConnection = new mysqli($db_host, $db_username, $db_password, $db_primaryDatabase); 

// If there are errors (if the no# of errors is > 1), print out the error and cancel loading the page via exit(); 
if (mysqli_connect_errno()) { 
    printf("Could not connect to MySQL databse: %s\n", mysqli_connect_error()); 
    exit(); 
} 

$queryCreateUsersTable = "CREATE TABLE IF NOT EXISTS `USERS` (
    `ID` int(11) unsigned NOT NULL auto_increment, 
    `EMAIL` varchar(255) NOT NULL default '', 
    `PASSWORD` varchar(255) NOT NULL default '', 
    `PERMISSION_LEVEL` tinyint(1) unsigned NOT NULL default '1', 
    `APPLICATION_COMPLETED` boolean NOT NULL default '0', 
    `APPLICATION_IN_PROGRESS` boolean NOT NULL default '0', 
    PRIMARY KEY (`ID`) 
)"; 

if(!$dbConnection->query($queryCreateUsersTable)){ 
    echo "Table creation failed: (" . $dbConnection->errno . ") " . $dbConnection->error; 
} 

welche Ausgänge ...

Table creation failed: (1050) Table ' dsl_ams . NUTZER ' already exists

Was ich nicht verstehe, ist: ist nicht IF NOT EXISTS soll die Ausführung der SQL-Abfrage abbrechen, wenn diese Tabelle bereits existiert? Mit anderen Worten, wenn die Tabelle existiert, sollte sie die if-Anweisung nicht verlassen und überhaupt nichts aussprechen und nicht versuchen, die Abfrage auszuführen?

Nur versuchen, den besten Weg zu finden, "eine Tabelle zu erstellen, wenn sie nicht existiert", ohne etwas an den Benutzer auszugeben.

+0

'$ queryCreateUsersTable! = $ QueryCreateTable', würde ich Benachrichtigungen aktivieren, um diese Art von Fehlern zu sehen. – Wrikken

+0

"Benachrichtigungen aktivieren"? Was meinen Sie? und ja, total derp meinerseits. –

+1

Setzen von error_reporting auf die richtige Ebene ('error_reporting (E_ALL | E_STRICT);' ist das, was ich beim Entwickeln verwenden würde) & 'ini_set ('display_errors', 1);' ini_set_s ('log_errors', 1); 'auf Ihrer Produktionsbox (keine Notwendigkeit, den Endbenutzern Fehler anzuzeigen) – Wrikken

Antwort

15

Versuchen Sie, diese

$query = "SELECT ID FROM USERS"; 
$result = mysqli_query($dbConnection, $query); 

if(empty($result)) { 
       $query = "CREATE TABLE USERS (
          ID int(11) AUTO_INCREMENT, 
          EMAIL varchar(255) NOT NULL, 
          PASSWORD varchar(255) NOT NULL, 
          PERMISSION_LEVEL int, 
          APPLICATION_COMPLETED int, 
          APPLICATION_IN_PROGRESS int, 
          PRIMARY KEY (ID) 
         )"; 
       $result = mysqli_query($dbConnection, $query); 
} 

Diese prüft, ob irgendetwas in der Tabelle ist, und wenn es NULL kehren Sie haben keinen Tisch.

Auch gibt es keinen BOOLEAN Datentyp in mysql, Sie sollten INT und einfach auf 1 oder 0 setzen, wenn Sie in die Tabelle einfügen. Sie benötigen auch keine einfachen Anführungszeichen für alles, nur wenn Sie Daten in die Abfrage fest codieren.

So ...

$query = "INSERT INTO USERS (EMAIL, PASSWORD, PERMISSION_LEVEL, APPLICATION_COMPLETED, APPLICATION_IN_PROGRESS) VALUES ('[email protected]', 'fjsdfbsjkbgs', 0, 0, 0)"; 

Hoffnung, das hilft.

+0

Ich würde 'SHOW TABLES LIKE 'USERS'' selbst verwenden. Beachten Sie, dass dies die Groß-/Kleinschreibung betrifft. – billynoah

4

Um Ausgaben zu vermeiden, testen Sie die Tabelle in Ihrem PHP, bevor Sie versuchen, die Tabelle zu erstellen. Zum Beispiel

$querycheck='SELECT 1 FROM `USERS`'; 

$query_result=$dbConnection->query($querycheck); 

if ($query_result !== FALSE) 
{ 
// table exists 
} else 
{ 
// table does not exist, create here. 
} 

Best wishes,

+0

Was ist, wenn die Tabelle erstellt wird, aber noch keine Datensätze? –

0

Wie wäre es, wenn Sie nur den Fehler anzeigen, wenn die Fehlernummer nicht 1050 ist?

if(!$dbConnection->query($queryCreateUsersTable)){ 
    if($dbConnection->errno != 1050){ 
    echo "Table creation failed: (" . $dbConnection->errno . ") " . $dbConnection->error; 
    } 
} 
Verwandte Themen