私は次のコードを持っています:
_$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ステートメントを終了し、何もエコーしないで、クエリを実行しないようにすべきではありませんか?
ユーザーに何も出力せずに「存在しない場合はテーブルを作成する」最良の方法を見つけようとするだけです。
これを試して
$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
が返される場合はテーブルがありません。
また、mysqlにはBOOLEAN
データ型がありません。INT
を使用し、テーブルに挿入するときに1または0に設定する必要があります。また、クエリにデータをハードコーディングするときだけ、すべてを単一引用符で囲む必要はありません。
このような...
$query = "INSERT INTO USERS (EMAIL, PASSWORD, PERMISSION_LEVEL, APPLICATION_COMPLETED, APPLICATION_IN_PROGRESS) VALUES ('[email protected]', 'fjsdfbsjkbgs', 0, 0, 0)";
お役に立てれば。
何も出力しないようにするには、テーブルを作成する前にphpでテーブルをテストします。例えば、
$querycheck='SELECT 1 FROM `USERS`';
$query_result=$dbConnection->query($querycheck);
if ($query_result !== FALSE)
{
// table exists
} else
{
// table does not exist, create here.
}
ご多幸を祈る、
エラー番号が1050でない場合にのみエラーを表示するのはどうですか?
if(!$dbConnection->query($queryCreateUsersTable)){
if($dbConnection->errno != 1050){
echo "Table creation failed: (" . $dbConnection->errno . ") " . $dbConnection->error;
}
}