很實用的操作!
PHP代碼:
🔒 隱藏內容:登錄後可查看
<?php
// 連接到 MySQL 數據庫
$host = "localhost"; // MySQL 服務器地址
$username = "your_username"; // MySQL 用戶名
$password = "your_password"; // MySQL 密碼
$dbname = "your_database"; // MySQL 數據庫名
$conn = new mysqli($host, $username, $password, $dbname);
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 上傳文件
if (isset($_FILES["file"]) && $_FILES["file"]["error"] == 0) {
$target_dir = "/path/to/upload/directory/"; // 修改爲你的上傳目錄
$target_file = $target_dir . basename($_FILES["file"]["name"]);
$fileType = pathinfo($target_file, PATHINFO_EXTENSION);
$allowedTypes = array('sql'); // 僅允許上傳 SQL 文件
if (in_array($fileType, $allowedTypes)) {
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
// 清空數據庫
$tables = $conn->query("SHOW TABLES")->fetch_all();
foreach ($tables as $table) {
$conn->query("DROP TABLE IF EXISTS {$table[0]}");
}
// 導入 SQL 文件
$sql = file_get_contents($target_file);
if ($conn->multi_query($sql)) {
echo "SQL 文件成功導入到數據庫。";
} else {
echo "導入 SQL 文件時發生錯誤:" . $conn->error;
}
} else {
echo "上傳文件失敗。";
}
} else {
echo "只允許上傳 SQL 文件。";
}
} else {
echo "請選擇要上傳的文件。";
}
// 關閉數據庫連接
$conn->close();
?>
請將 $host,$username,$password,$dbname,$target_dir 替換爲你的實際信息。上傳的 SQL 文件必須存儲在 $target_dir 目錄中,且只允許上傳 SQL 文件。如果上傳和導入過程中沒有錯誤,則會清空數據庫並導入 SQL 文件。
注意:在實際生產環境中,爲了安全起見,應該對上傳的文件進行更多的驗證和過濾,例如:限制上傳的文件類型、大小,防止文件上傳漏洞等。
HTML表單:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Upload SQL File</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-g5AX/vyqo5KOGxz5AAn/AY1dRItbsdw7tHtzNjh9avsgzP0nckdKP/Jc1wJfONjK" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1>Upload SQL File</h1>
<form action="upload_sql.php" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="sqlFile">Select SQL File</label>
<input type="file" class="form-control-file" id="sqlFile" name="sqlFile">
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.6.0.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@2.9.3/dist/umd/popper.min.js" integrity="sha384-lb6U1+A6OHXWnogQIgUpkzwFJa5yk5PbRyfPYpV1FaaLnNm/KTMc2QH8Heq7ZjKd" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" integrity="sha384-LpW1aXBBv/smfihSkStFCTyJf35QLlAdAGl7Yh2i2IDJnVWj9X3v7FJITgG14x7V" crossorigin="anonymous"></script>
</body>
</html>
請注意,此表單僅包含一個文件輸入框和一個提交按鈕,可以上傳 SQL 文件並將其提交到名爲 upload_sql.php 的處理腳本。 你需要根據實際需要修改表單元素的名稱和提交操作的目標。
兩者結合後,舉個栗子
🔒 隱藏內容:會員可查看
<?php
if($_FILES['sqlFile']){
// 連接到 MySQL 數據庫
$host = "localhost"; // MySQL 服務器地址
$username = "test_4s5_cn"; // MySQL 用戶名
$password = "wnxxtJTa3y4SPPrr"; // MySQL 密碼
$dbname = "test_4s5_cn"; // MySQL 數據庫名
$conn = new mysqli($host, $username, $password, $dbname);
if ($conn->connect_error) {
die("連接失敗: " . $conn->connect_error);
}
// 上傳文件
if (isset($_FILES["sqlFile"]) && $_FILES["sqlFile"]["error"] == 0) {
$target_dir = __DIR__."/path/"; // 修改爲你的上傳目錄
// 創建指定目錄
if (!mkdir($target_dir, 0777, true)) {
throw new Exception('Failed to create directory.');
}
$target_file = $target_dir . basename($_FILES["sqlFile"]["name"]);
$fileType = pathinfo($target_file, PATHINFO_EXTENSION);
$allowedTypes = array('sql'); // 僅允許上傳 SQL 文件
if (in_array($fileType, $allowedTypes)) {
if (move_uploaded_file($_FILES["sqlFile"]["tmp_name"], $target_file)) {
// 清空數據庫
$tables = $conn->query("SHOW TABLES")->fetch_all();
foreach ($tables as $table) {
$conn->query("DROP TABLE IF EXISTS {$table[0]}");
}
// 導入 SQL 文件
$sql = file_get_contents($target_file);
if ($conn->multi_query($sql)) {
echo "SQL 文件成功導入到數據庫。";
} else {
echo "導入 SQL 文件時發生錯誤:" . $conn->error;
}
} else {
echo "上傳文件失敗。";
}
} else {
echo "只允許上傳 SQL 文件。";
}
} else {
echo "請選擇要上傳的文件。";
}
if (is_dir($target_dir)) { // 如果目錄存在
$files = glob($target_dir . '/*'); // 獲取目錄下的所有文件和子目錄
foreach ($files as $file) {
if (is_file($file)) { // 如果是文件則直接刪除
unlink($file);
} else { // 如果是子目錄則遞歸調用自身
deleteDir($file);
}
}
rmdir($target_dir); // 刪除目錄
}
// 關閉數據庫連接
$conn->close();
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Upload SQL File</title>
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css" integrity="sha384-g5AX/vyqo5KOGxz5AAn/AY1dRItbsdw7tHtzNjh9avsgzP0nckdKP/Jc1wJfONjK" crossorigin="anonymous">
</head>
<body>
<div class="container">
<h1>Upload SQL File</h1>
<form action="<?=$SERVER['SCRIPT_NAME']?>" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="sqlFile">Select SQL File</label>
<input type="file" class="form-control-file" id="sqlFile" name="sqlFile">
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
</div>
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.6.0.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@2.9.3/dist/umd/popper.min.js" integrity="sha384-lb6U1+A6OHXWnogQIgUpkzwFJa5yk5PbRyfPYpV1FaaLnNm/KTMc2QH8Heq7ZjKd" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" integrity="sha384-LpW1aXBBv/smfihSkStFCTyJf35QLlAdAGl7Yh2i2IDJnVWj9X3v7FJITgG14x7V" crossorigin="anonymous"></script>
</body>
</html>