Несколько CREATE TABLE в одном скрипте

0

Я создаю страницу настройки 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);
  • 0
    добавьте php-код, который вы используете для запуска файла sql
  • 0
    Что происходит, когда вы запускаете его с двумя предложениями? Как вы называете этот SQL из PHP?
Показать ещё 2 комментария
Теги:

2 ответа

0

Ваш код предполагает, что в файле есть только один оператор.

Вы можете (1) анализировать операторы для их последовательного выполнения или (2) выполнять файл с внешним вызовом команды mysql.

1. Разбор

Разбор заявлений выглядит как простая задача, что-то вроде

$sqltxt = file_get_contents("setup.sql");
$statements = explode(";", $sqltxt);
foreach($statements as $stmt){
   @mysql_query($stmt)
}

но будьте осторожны, потому что их легко поймать внутренние команды, встроенные точки с запятой и другие ловушки.

2. внешняя команда

это тоже выглядит просто

$command = 'mysql --user=usr1 --password=secret --database=db --execute="SOURCE setup.sql"';
$res = shell_exec($command);

но снова может попасть в подходящую команду на кросс-платформенном пути.

  • 0
    Говоря это, я могу показаться довольно глупым, но как мне выполнить вышеизложенное?
  • 0
    Спасибо, это сработало
Показать ещё 1 комментарий
0

Не совсем уверен, что вы пытаетесь сделать здесь, но если вы пытаетесь проверить, существует ли таблица перед созданием, 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))
  • 0
    Сделал небольшое редактирование и удалил, ЕСЛИ НЕ СУЩЕСТВУЕТ. Все равно не работает
  • 0
    Определите «не работает», желательно с вашими ожиданиями и любым сообщением об ошибке, которое возвращается.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню