如何在单个 tables.sql 文件中编写多个查询并使用 PHP 上传?

How to write multiple queries in a single tables.sql file and upload it using PHP?

我只想通过 PHP.

使用 tables.sql 文件创建 2 个或更多表

PHP create_db.php

<?php
require 'config.php';


$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD);
/* check connection */
if($mysqli->connect_errno){
  echo "MySQL connection failed.<br>";
  exit();
}else{
  echo "MySQL successfully connected.<br>";
}

// DB create
if($mysqli->query('CREATE DATABASE IF NOT EXISTS '.DB_NAME.';') === TRUE){
  echo "Database successfully created.<br>";
}else{
  echo "Error: ".$mysqli->errno.", ".$mysqli->error."<br>";
}

// DB select
if($mysqli->select_db(DB_NAME) === TRUE){
  echo "Database successfully selected.<br>";
}else{
  echo "Error: ".$mysqli->errno.", ".$mysqli->error;
}

// Create tables
if($mysqli->query(file_get_contents('../sql/tables.sql')) === TRUE){
  echo "Tables successfully created.<br>";
}else{
  echo "Error: ".$mysqli->errno.", ".$mysqli->error."<br>";
}

$mysqli->close();
?>

DB_HOST、DB_USER、DB_PASSWORD、DB_NAME在config.php文件中定义

PHP v7.4.7

SQL tables.sql

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(100) NOT NULL,
  `password` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
);
CREATE TABLE IF NOT EXISTS `status` (
  `status` varchar(100) NOT NULL,
  `IDtime` varchar(100) NOT NULL
);

如果我使用命令行将此 tables.sql 文件直接上传到 MySQL 服务器,它可以正常工作。

MySQL v8.0.20 MySQL Comunity Server - GPL

错误信息

Error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CREATE TABLE IF NOT EXISTS status ( status varchar(100) NOT NULL, `IDt' at line 16

mysqli::query 只接受单个查询 https://www.php.net/manual/en/mysqli.query.php.

如果你想一次执行多个查询,你必须使用 mysqli::multi_query https://www.php.net/manual/en/mysqli.multi-query.php.

示例:

$result = $mysqli->query("SELECT * FROM reservations;SELECT * FROM reservations");
var_dump($result, $mysqli->error);

bool(false)
string(172) "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT * FROM reservations' at line 1"


$result = $mysqli->multi_query("SELECT * FROM reservations;SELECT * FROM reservations");
var_dump($result, $mysqli->error);

bool(true)
string(0) ""