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

PHP接收AJAX POST请求时,如何高效转换小驼峰字段为MySQL下划线字段?

小驼峰参数名转MySQL下划线字段名的高效方案

问题场景

通过jQuery AJAX向PHP发送POST请求时,AJAX参数采用小驼峰命名(如firstName),但MySQL表字段使用下划线命名(如first_name),当前需逐个手动转换字段名,寻求更高效的批量转换方案。

AJAX请求代码

$("#addUser").on('click', '.btnAddSubmitFormModal', function() {
  $.post("add.php",
  {
      firstName: $("#modalFormAddFirstName").val(),
      lastName: $("#modalFormAddLastName").val(),
      middleName: $("#modalFormAddMiddleName").val(),
  })
  .done(function (result, status, xhr) {
      // 业务处理逻辑
  });
});

PHP原插入代码

$keys = array();
$values = array();
foreach ($_POST as $column) {
    $value = trim($_POST[$column]);
    $value = mysql_real_escape_string($value);
    $keys[] = "`{$column}`";
    $values[] = "'{$value}'";
}

$query = "INSERT INTO 'table' (" . implode(",", $keys) . ") 
          VALUES (" . implode(",", $values) . ");";

当前手动转换方式

$_POST['first_name'] = $_POST['firstName'];
unset($_POST['firstName']);
// 其他字段重复执行上述操作

高效转换方案

1. 正则批量转换字段名

利用PHP正则匹配大写字母,批量将小驼峰转为下划线命名:

$convertedPost = [];
foreach ($_POST as $key => $value) {
    // 把大写字母替换为"_+小写字母",再转全小写
    $newKey = strtolower(preg_replace('/([A-Z])/', '_$1', $key));
    $convertedPost[$newKey] = trim($value);
}

// 后续操作直接使用$convertedPost替代原$_POST

2. 封装可复用的转换函数

如果需要在多处复用转换逻辑,可以封装成独立函数:

function camelToSnake(string $str): string {
    return strtolower(preg_replace('/([A-Z])/', '_$1', $str));
}

// 批量转换整个POST数组
$convertedPost = [];
foreach ($_POST as $key => $value) {
    $convertedPost[camelToSnake($key)] = trim($value);
}

3. 优化插入代码(同时规避SQL注入)

注意:mysql_real_escape_string已被PHP废弃,建议改用mysqli或PDO的预处理语句,彻底避免SQL注入风险。以下是基于mysqli的优化实现:

// 先完成字段名转换
$convertedPost = [];
foreach ($_POST as $key => $value) {
    $newKey = strtolower(preg_replace('/([A-Z])/', '_$1', $key));
    $convertedPost[$newKey] = trim($value);
}

// 使用mysqli预处理语句执行插入
$mysqli = new mysqli('localhost', '用户名', '密码', '数据库名');
$columns = implode(', ', array_map(fn($col) => "`{$col}`", array_keys($convertedPost)));
$placeholders = implode(', ', array_fill(0, count($convertedPost), '?'));
$query = "INSERT INTO `table` ({$columns}) VALUES ({$placeholders})";

$stmt = $mysqli->prepare($query);
// 绑定参数(这里假设所有字段都是字符串类型,可根据实际调整类型标识)
$types = str_repeat('s', count($convertedPost));
$stmt->bind_param($types, ...array_values($convertedPost));
$stmt->execute();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:16:10