我有以下代码:
$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; }
哪个输出…
Table creation failed: (1050) Table '`dsl_ams`.`USERS`' already exists
我不明白的是:IF NOT EXISTS如果该表已经存在,是否不应该取消SQL查询的执行?换句话说,如果该表存在,它是否不应该退出if语句并且根本不回显任何内容,并且不尝试执行查询?
IF NOT EXISTS
只是试图找到最好的方法来“创建一个不存在的表”而不向用户输出任何内容。
试试这个
$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); }
这将检查表中是否有任何内容,如果返回NULL则没有表。
NULL
BOOLEANmysql中也没有数据类型,INT插入表时应该将其设置为1或0。您也不需要将所有内容都括在单引号中,而只是在将数据硬编码到查询中时。
BOOLEAN
INT
像这样…
$query = "INSERT INTO USERS (EMAIL, PASSWORD, PERMISSION_LEVEL, APPLICATION_COMPLETED, APPLICATION_IN_PROGRESS) VALUES ('foobar@foobar.com', 'fjsdfbsjkbgs', 0, 0, 0)";