在循环中插入带有预准备语句的几行



使用数组部分插入时 Sqlserv php 错误

阵列准备

foreach ($data  as $rs) {
 $params []="({$rs->hd},'{$rs->dvn}',{$rs->mth},{$rs->yr},{$rs->stid},{$rs->prcd},'{$rs->prnm}',{$rs->prte},{$rs->ssl},{$rs->clsk},1)";
}

插入到语句中:

$SqlInsert="insert into  SQl_test (Ss_Hq_cd,Ss_division,Ss_month,Ss_yr,Ss_stk_Id,Ss_prod_cod,Ss_prod_name,ss_prod_rate,Ss_Sale,Ss_Cl_stk,ss_tran_stat) values(?,?,?,?,?,?,?,?,?,?,?) ";
$stmt = sqlsrv_query( $conn, $SqlInsert,$params);

EROOR:

语句准备/执行时出错。"

数组 ( [0] => 数组 ( [0] => 22018 [SQLSTATE] => 22018 [1] => 245 [代码] => 245 [2] => [Microsoft][SQL Server ODBC 驱动程序 13][SQL Server]将 varchar 值"(757,'

MAIN',12,2018,100899,1250,'xyz',0,100,45,1)' 转换为数据类型 int 时转换失败。 [消息] => [Microsoft][ODBC 驱动程序 13 for SQL Server][SQL Server]转换 varchar 值时转换失败 '(757,'MAIN',12,2018,100899,1250,'xyz',0,100,45,1)' 到数据类型 int.)

$params的每个数组元素都是作为字符串创建的...

 $params []="({$rs->hd},'{$rs->dvn}',{$rs->mth},{$rs->yr},{$rs->stid},{$rs->prcd},'{$rs->prnm}',{$rs->prte},{$rs->ssl},{$rs->clsk},1)";

您可能打算将其创建为数组...

 $params []=[$rs->hd,$rs->dvn,$rs->mth,$rs->yr,$rs->stid,$rs->prcd,$rs->prnm,$rs->prte,$rs->ssl,$rs->clsk,1];

然后,您将在循环中运行 INSERT,将每个数据数组一次传递给查询...

$SqlInsert="insert into  SQl_test (Ss_Hq_cd,Ss_division,Ss_month,Ss_yr,Ss_stk_Id,Ss_prod_cod,Ss_prod_name,ss_prod_rate,Ss_Sale,Ss_Cl_stk,ss_tran_stat) values(?,?,?,?,?,?,?,?,?,?,?) ";
foreach ( $params as $param ) {
    $stmt = sqlsrv_query( $conn, $SqlInsert,$param);
}

使用 mysqli - 您还将在循环之前准备 INSERT,然后对循环中的每一行数据执行它,SQL Server 中可能有类似的事情,但不是我的知识领域。

最新更新