CREATE TABLE如果NOT EXISTS失败,表已经存在

Sam*_*les 16 php mysql sql mysqli

我有以下代码:

$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;
}
Run Code Online (Sandbox Code Playgroud)

哪个输出......

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

我不明白的是:IF NOT EXISTS如果该表已经存在,是不是应该取消SQL查询的执行?换句话说,如果表存在,它不应该退出if语句而不回显任何东西,而不是尝试执行查询吗?

只是试图找到"创建一个表,如果它不存在"的最佳方法,而不向用户输出任何内容.

Jos*_*tis 20

试试这个

$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);
}
Run Code Online (Sandbox Code Playgroud)

这将检查表中是否有任何内容,如果它返回NULL,则表示没有表.

BOOLEAN在mysql中也没有数据类型,你应该INT在插入表时将其设置为1或0.当您将数据硬编码到查询中时,您也不需要围绕所有内容使用单引号.

像这样...

$query = "INSERT INTO USERS (EMAIL, PASSWORD, PERMISSION_LEVEL, APPLICATION_COMPLETED, APPLICATION_IN_PROGRESS) VALUES ('foobar@foobar.com', 'fjsdfbsjkbgs', 0, 0, 0)";
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我不是一个MySQL专家,但如果表存在但是空的话,这不会失败吗? (4认同)

小智 5

为避免输出任何内容,请在尝试创建表之前测试php中的表.例如,

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

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

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

最好的祝愿,

  • 如果表已创建但还没有任何记录怎么办? (2认同)