В значительной степени говорит само за себя, но по какой-то причине он всегда работает вместо того, чтобы работать один раз (когда таблица не существует) …
$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
даже если таблица уже существует !!!
Зачем?
Вы должны проверить, если таблица существует или нет, потому что $ 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!!";
}
Вы проверяете, существует ли оператор SQL, а не результат. Тем не менее, вам необходимо строго проверить успешное выполнение оператора с помощью ===
(не просто ==
или тестирование переменной напрямую). Удалить IF NOT EXISTS
из запроса, а затем проверить, как это;
if ($create_tbl === true) {
echo "Table was created";
}
else {
echo "Error!!";
}
Я никогда не работал с MySQLi
API раньше (всегда использую PDO
), но разве он не возвращает истину, потому что запрос действительно был успешным?
Я думаю, что он возвращает false только если ваше соединение не удалось или такая ошибка.
Я только что удалил IF NOT EXISTS
и это работает как шарм! Спасибо @Mark Baker за то, что указал на это! 🙂