Я создаю страницу настройки php и хочу запустить sql файл при нажатии кнопки отправки. Хотя в файле SQL у меня есть 2 CREATE TABLE, и он будет работать только в том случае, если есть 1 CREATE TABLE. Ниже приведен фрагмент:
CREATE TABLE users (
'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(255) NOT NULL,
email varchar(255) NOT NULL,
password varchar(255) NOT NULL
);
CREATE TABLE details (
name varchar(255),
server_ip varchar(255),
store_link varchar(255),
bans_link varchar(255)
);
PHP-код:
include("../config.php");
$slashy = file_get_contents("setup.sql");
mysqli_query($conn, $slashy);
Ваш код предполагает, что в файле есть только один оператор.
Вы можете (1) анализировать операторы для их последовательного выполнения или (2) выполнять файл с внешним вызовом команды mysql.
Разбор заявлений выглядит как простая задача, что-то вроде
$sqltxt = file_get_contents("setup.sql");
$statements = explode(";", $sqltxt);
foreach($statements as $stmt){
@mysql_query($stmt)
}
но будьте осторожны, потому что их легко поймать внутренние команды, встроенные точки с запятой и другие ловушки.
это тоже выглядит просто
$command = 'mysql --user=usr1 --password=secret --database=db --execute="SOURCE setup.sql"';
$res = shell_exec($command);
но снова может попасть в подходящую команду на кросс-платформенном пути.
Не совсем уверен, что вы пытаетесь сделать здесь, но если вы пытаетесь проверить, существует ли таблица перед созданием, T-SQL будет выглядеть следующим образом.
IF NOT EXISTS (SELECT name FROM sys.tables WHERE name='users')
CREATE TABLE users (
'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username varchar(255) NOT NULL,
email varchar(255) NOT NULL,
password varchar(255) NOT NULL)
IF NOT EXISTS (SELECT name FROM sys.tables WHERE name='details')
CREATE TABLE details (
name varchar(255),
server_ip varchar(255),
store_link varchar(255),
bans_link varchar(255))