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

使用PHP无法向MySQL服务器提交数据,请求技术协助

问题诊断与修复方案

核心错误:SQL语法错误

你的插入语句里,列名错误地使用了单引号'——MySQL中标识符(列名、表名)需用反引号`包裹(或无需引号),单引号会被解析为字符串字面量,直接导致SQL语法错误,预处理语句初始化失败,最终无法执行插入操作。

原错误代码片段:

$sql  = "INSERT INTO `countryInfo` ('countryName','countryPhone','countryCurrency') VALUES (?,?,?)";

修正后的SQL语句:

$sql  = "INSERT INTO `countryInfo` (`countryName`,`countryPhone`,`countryCurrency`) VALUES (?,?,?)";

补充关键调试:添加错误捕获机制

当前代码未对预处理、执行过程的错误做检查,即使执行失败也无法获取具体原因。建议补充以下错误处理逻辑:

// 检查预处理语句是否初始化成功
$stmt = $conn->prepare($sql);
if (!$stmt) {
    die("预处理失败: " . $conn->error);
}

// 检查插入操作是否执行成功
if (!$stmt->execute()) {
    die("插入执行失败: " . $stmt->error);
}

其他优化建议

  1. 避免使用global传递数据库连接:将$conn作为参数传入函数,代码逻辑更清晰且易于维护:
// 调用函数时传入连接
writeDataToServer($conn);

// 函数定义修改为
function writeDataToServer($conn){
    // 内部直接使用传入的$conn即可
}
  1. 统一MySQLi使用风格:你混合了面向过程(mysqli_connect)和面向对象($conn->connect_error)写法,建议统一为面向对象风格:
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}
  1. 开启PHP错误提示:调试阶段在代码开头添加以下代码,便于捕获PHP层面的错误:
error_reporting(E_ALL);
ini_set('display_errors', 1);

完整修复后的代码示例

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

include_once('db.php');

// 面向对象风格初始化数据库连接
$conn = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if ($conn->connect_error) {
    die("Failed to connect to server: " . $conn->connect_error);
} else {
    print("Connected\n");
    writeDataToServer($conn);
}

function writeDataToServer($conn){
    $TABLE = 'countryInfo'; 

    if($_SERVER['REQUEST_METHOD'] == "POST"){
        $countryName = trim($_POST['countryName']);
        $countryPhone = trim($_POST['countryPhone']);
        $countryCurrency = trim($_POST['countryCurrency']);
        
        if(!empty($countryName) && !empty($countryPhone) && !empty($countryCurrency)){
            echo 'Values check passed';

            // 修正列名的引号为反引号
            $sql  = "INSERT INTO `countryInfo` (`countryName`,`countryPhone`,`countryCurrency`) VALUES (?,?,?)";
            $stmt = $conn->prepare($sql);
            
            if (!$stmt) {
                die("预处理失败: " . $conn->error);
            }

            $stmt->bind_param("sss", $countryName, $countryPhone, $countryCurrency);
            
            if ($stmt->execute()) {
                echo 'Successfully Inserted';
            } else {
                die("插入执行失败: " . $stmt->error);
            }

            $stmt->close();
            $conn->close();
        } else {
            echo "Please check if all values are set";
        }
    } else {
        echo 'REQUEST METHOD IS NOT POST';
    }
}
?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:37:49