我正在制作一个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 :(得分: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命令来执行该文件。
解析语句看起来像一个简单的任务,
$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);
但是再次可以通过跨平台方式接受适当的命令。