使用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
相关产品推荐
相关产品推荐

