我正在使用CI中的应用程序,我有一个模型可以将上传表单中的图像路径插入到数据库中。
此代码在我的localhost环境中100%正确,但在远程服务器上运行时,它失败并带有
Error Number: 1062
Duplicate entry '89-ci/flatfee/uploads/37' for key 'PRIMARY'
我们的想法是使用将listingid映射到image_path的image_map_table,因此每个图像路径的表格中的listingid必须重复多次,因此重复条目。以下是模型中的函数:
function insert_paths($params, $transID){
$lid = $this->getListingID($transID);
if($lid != false) {
$i = 0;
foreach ($params['image_paths'] as $value) {
$sql = "INSERT INTO listing_image_map(idlisting, image_path) VALUES(".$lid.", '".$value."')";
$q = $this->db->query($sql);
$i++;
}
if(sizeof($params['image_paths']) == $i ){
return true;
}
} else {
return false;
}
}
$ params是一个数组,从控制器传入来自上传表单的所有图像路径。我理解错误,以及为什么它在基本级别上发生,但更详细的解释为什么它在localhost而不是在远程服务器上工作会很好,并且可能的解决方案。
感谢。
编辑:感谢Ashwini Dhekane,我发现了这个问题。文件路径是从一个数组创建的,因此服务器上的默认文件路径在其结构中比在我的本地环境中更长,因此用于创建文件夹结构的索引必须为远程服务器增加并在本地减少环境(所以现在我有两套代码,我一直在评论和取消评论,这取决于我在哪个服务器上工作,有点麻烦,但我只需要在这部分工作几天。)谢谢Ashwini,你的帖子让我看向正确的区域,所以我会把它标记为正确。
答案 0 :(得分:2)
'89-ci/flatfee/uploads/37'
似乎是上传文件的路径,错误显示该路径是primary key
列。主键列中不能有任何两行具有相同的值。
如果您尝试上传SQL转储,则无法执行此操作;钥匙总会碰撞。在这种情况下,您将不得不编写自定义脚本。