在一个脚本中创建多个表

wvyml7n5  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(319)

我正在制作一个php设置页面,并希望在单击submit按钮时运行一个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);
dbf7pr2w

dbf7pr2w1#

不太确定您在这里想要实现什么,但是如果您在创建表之前尝试验证表是否存在,那么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))
e4yzc0pl

e4yzc0pl2#

代码假定文件中只有一条语句。
您可以(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);

但又会被抓到以跨平台的方式适应适当的命令。

相关问题