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

使用HTML+PHP向MSSQL提交表单数据插入代码报错排查

PHP 操作 SQL Server 插入数据代码问题修正

现有代码存在的明确错误

  • 变量名引用错误:代码中定义的SQL语句变量为$query、参数数组变量为$params1,但调用sqlsrv_query时传入的是未定义的$sql和$params,变量不匹配会直接导致执行中断。
  • 参数化查询写法错误:使用SQLSRV扩展做参数绑定时,不需要把PHP变量直接拼入SQL字符串,也不需要给值手动加单引号,需要用?作为顺序占位符,否则参数绑定完全不生效,还存在SQL注入风险。
  • 参数列表与字段不匹配:INSERT语句共指定14个字段,但你定义的参数数组仅13个元素,遗漏了$Document、$doc_date两个参数,还重复写入了一次$xxx_date,参数顺序、数量和字段无法对应,会触发执行错误。

修正后的可运行代码

<?php
// 定义带占位符的插入SQL,?的数量和字段数量严格一致
$query = "
   INSERT INTO dbo.facturi_achizitii 
      (tip, MBxxx, xxx_key, Document, Reference, doc_xxx_text, doc_date, xxx_date, Customer, Business_xxx, xxx_jurnal, valoare_xxx, tax_b_amount, output_xxx) 
   VALUES 
      (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";

// 参数数组顺序严格和字段、占位符顺序一一对应
$params = [
    $tip,
    $MBxxx,
    $xxx_key,
    $Document,
    $Reference,
    $doc_xxx_text,
    $doc_date,
    $xxx_date,
    $Customer,
    $Business_xxx,
    $xxx_jurnal,
    $valoare_xxx,
    $tax_b_amount,
    $output_xxx
];

// 传入正确的变量执行查询
$stmt = sqlsrv_query($conn, $query, $params);
if ($stmt === false) {
    die(print_r(sqlsrv_errors(), true));
}

// 执行完成后释放语句资源
sqlsrv_free_stmt($stmt);
?>

补充说明:如果表中doc_date、xxx_date是SQL Server的日期/时间类型,不要直接传入格式不匹配的字符串,建议提前在PHP侧处理成符合MSSQL日期格式的字符串,或在参数中指定SQLSRV对应的参数类型,避免类型校验不通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 03:36:09