CREATE TABLE IF NOT EXISTS всегда создает новую таблицу (даже если она существует)

В значительной степени говорит само за себя, но по какой-то причине он всегда работает вместо того, чтобы работать один раз (когда таблица не существует) …

$mysqli = mysqli_connect('localhost','user','pass','databasename');

$create_table =
'CREATE TABLE IF NOT EXISTS student
(
`1` longtext NOT NULL,
`2` longtext NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;';

$create_tbl = $mysqli->query($create_table);

if ($create_table) {
echo "Table has created";
}
else {
echo "error!!";
}

это всегда эхо Table has created даже если таблица уже существует !!!

Зачем?

1

Решение

Вы должны проверить, если таблица существует или нет, потому что $ create_tbl вернуть 1 каждый раз.
так беги SHOW TABLES LIKE 'student' до

$mysqli = mysqli_connect('localhost','root','root','test');

$create_table =
'CREATE TABLE IF NOT EXISTS student
(
`1` longtext NOT NULL,
`2` longtext NOT NULL
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;';if(mysqli_num_rows($mysqli->query("SHOW TABLES LIKE 'student'")) !=1) {
$create_tbl = $mysqli->query($create_table);
} else {
echo "error!!";
}
2

Другие решения

Вы проверяете, существует ли оператор SQL, а не результат. Тем не менее, вам необходимо строго проверить успешное выполнение оператора с помощью === (не просто == или тестирование переменной напрямую). Удалить IF NOT EXISTS из запроса, а затем проверить, как это;

if ($create_tbl === true) {
echo "Table was created";
}
else {
echo "Error!!";
}
1

Я никогда не работал с MySQLi API раньше (всегда использую PDO), но разве он не возвращает истину, потому что запрос действительно был успешным?

Я думаю, что он возвращает false только если ваше соединение не удалось или такая ошибка.

1

Я только что удалил IF NOT EXISTS и это работает как шарм! Спасибо @Mark Baker за то, что указал на это! 🙂

1