wake-up-neo.com

CREATE TABLE WENN NOT EXISTS fehlschlägt, ist die Tabelle bereits vorhanden

Ich habe folgenden Code:

$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.USERS' already exists

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

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

15
Samuel Stiles

Versuche dies

$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);
}

Dies prüft, ob etwas in der Tabelle enthalten ist und ob es NULL zurückgibt, Sie haben keine Tabelle.

Es gibt auch keinen BOOLEAN-Datentyp in mysql. Sie sollten INT und beim Einfügen in die Tabelle einfach auf 1 oder 0 setzen. Sie brauchen auch keine einfachen Anführungszeichen um alles, nur wenn Sie Daten hart in die Abfrage eincodieren.

So was...

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

Hoffe das hilft.

17
Josh Balcitis

Um zu vermeiden, dass etwas ausgegeben wird, 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.
}

Schöne Grüße,

5
Eduardo Vieira

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

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