将数组作为数据源执行SQL DELETE操作时报数组转字符串错误如何解决
错误原因
你触发报错的核心原因是$checkIndexes是数组类型,PHP不支持直接将数组变量嵌入字符串进行解析,尝试这么做就会抛出Array to string conversion错误。你写SQL语句时IN子句需要的是1,2,3,4这类逗号分隔的字符串格式,需要先手动把数组转成对应格式再代入。
修复方案(暂忽略SQL注入风险的前提下)
首先用implode()函数将ID数组拼接为逗号分隔的字符串,再代入SQL语句,同时注意如果你的id字段是数值类型,IN子句里不需要给ID加单引号:
$checkIndexes = $_POST['checkIndexes']; print_r($checkIndexes); // 数组转逗号分隔字符串 $idStr = implode(',', $checkIndexes); $deleteProperty = " BEGIN TRANSACTION [deleteProperty] BEGIN TRY DELETE FROM eigenschaften WHERE id IN ($idStr); COMMIT TRANSACTION [deleteProperty]; END TRY BEGIN CATCH ROLLBACK TRANSACTION [deleteProperty] END CATCH "; if (!sqlsrv_query($connection, $deleteProperty)) { die (print_r(sqlsrv_errors(), true)); }
补充注意事项
如果后续要优化避免SQL注入,推荐使用参数化查询,按数组长度动态生成对应数量的占位符再绑定参数即可。
内容的提问来源于stack exchange,提问作者ICoded
相关产品推荐
相关产品推荐

