【问题标题】:INSERT several rows with a prepared statement in a loop在循环中使用准备好的语句插入几行
【发布时间】:2019-01-23 11:01:09
【问题描述】:

使用数组部分插入时出现 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:

语句准备/执行出错。\n"

Array ( [0] => Array ( [0] => 22018 [SQLSTATE] => 22018 [1] => 245 [code] => 245 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server] 将 varchar 值 '(757,'MAIN',12,2018,100899,1250,'xyz',0,100,45,1)' 转换为数据类型 int 时转换失败。[message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]将 varchar 值 '(757,'MAIN',12,2018,100899,1250,'xyz',0,100,45,1)' 转换为数据类型 int.))

【问题讨论】:

    标签: php loops prepared-statement sql-insert sqlsrv


    【解决方案1】:

    $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 中可能有类似的事情,但不是我的知识领域。

    【讨论】:

      猜你喜欢
      • 2012-01-14
      • 2012-09-17
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      相关资源
      最近更新 更多