You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP处理表单提交时无法动态创建指定名称MySQL表问题求助

错误原因

  • 表名拼接语法错误:你使用单引号包裹表名片段,MySQL中单引号为字符串标识符,不能用于拼接表名;如果表名存在特殊字符,需要用反引号 ` 包裹,同时变量拼接逻辑有误,没有正确将两个变量用下划线连接。
  • 建表语句不合法:MySQL不允许创建无任何字段的空表,你写的CREATE TABLE语句括号内未定义任何列结构。
  • 存在冗余重复逻辑:代码中先后写了两次建表查询、两次插入数据查询,属于无效冗余代码。
  • header跳转前存在输出:上传成功/失败的echo输出会导致header跳转失效,HTTP头部必须在任何内容输出前发送。

修复代码

<?php
if(isset($_POST['mySubmit'])) {
    $db = mysqli_connect('localhost','root','','DBsito');
    if (!$db)
    {
        die('数据库连接失败: ' . mysqli_error($db));
    }

    $imagename = $_FILES['icona']['name'];
    $imagetemp = $_FILES['icona']['tmp_name'];
    
    $imagePath = "img/upload/";
    $uploadStatus = "";
    if(is_uploaded_file($imagetemp)) {
        if(move_uploaded_file($imagetemp, $imagePath . $imagename)) {
            $uploadStatus = "图片上传成功";
        }
        else {
            $uploadStatus = "图片移动失败";
        }
    }
    else {
        $uploadStatus = "图片上传失败";
    }

    $categoria = mysqli_real_escape_string($db, $_POST['categoria']);
    $username = mysqli_real_escape_string($db, $_POST['utente']);

    $checkSql = "SELECT nome_categoria, user_utente FROM categoria WHERE BINARY nome_categoria = BINARY '$categoria' AND BINARY user_utente = BINARY '$username'";
    $result = mysqli_query($db, $checkSql);

    if(!empty($categoria) && mysqli_num_rows($result)) {
        $name_error = "分类已存在!";
    }
    else if (!empty($categoria)){
        // 拼接合法表名,反引号包裹避免特殊字符问题
        $tableName = "`{$categoria}_{$username}`";
        // 建表必须定义字段,示例添加主键id,可按需扩展其他字段
        $createTableSql = "CREATE TABLE {$tableName} (
            id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
        ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
        
        if ($db->query($createTableSql) === TRUE) {
            // 建表成功后执行分类插入
            $insertSql = "INSERT INTO categoria (nome_categoria, user_utente, icona) VALUES ('$categoria','$username', '$imagename')";
            if(mysqli_query($db, $insertSql)){
                header("Location: confermaCategoria.php");
                exit();
            }else{
                die("分类插入失败: " . mysqli_error($db));
            }
        } else {
            die("建表失败: " . $db->error);
        }
    }
    else {
        $name_error = "";
    }
    // 非跳转场景输出提示信息
    echo $uploadStatus;
    if(!empty($name_error)) echo $name_error;
    mysqli_close($db);
}
?>

内容的提问来源于stack exchange,提问作者asbarabungi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:36:01