一个脚本中有多个CREATE TABLE

时间:2018-04-10 15:47:14

标签: mysql sql

我正在制作一个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);

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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);

但是再次可以通过跨平台方式接受适当的命令。