【发布时间】:2016-07-17 10:39:05
【问题描述】:
我有两张桌子:
表格图像
id_images | dir_image | post_id
1 image1.jpg 1
2 image2.jpg 1
3 image3.jpg 1
4 image4.jpg 1
5 image5.jpg 2
6 image6.jpg 2
7 image7.jpg 2
8 image8.jpg 2
表帖子
id_post | slug | title
1 title_post Title Post
2 title_post_2 Title Post 2
PHP
public function update($idsimages, $dir_images, $idPost, $title, $slug)
{
try {
$stmt = $this->db->prepare("UPDATE posts SET
title = :title,
slug = :slug,
WHERE id_post=:id_post");
$stmt->bindParam(":id_post",$idPost);
$stmt->bindParam(":title",$title);
$stmt->bindParam(":slug",$slug);
$stmt->execute();
$stmt = $this->db->prepare("UPDATE images SET
dir_images = :dir_images
WHERE id_images = :id_images");
foreach ($idsimages as $idsimage) {
foreach ($dir_images as $item){
$stmt->bindParam(":id_images", $idsimage);
$stmt->bindParam(":dir_images", $item);
} //end foreach dir_images
$stmt->execute();
} // end foreach idsimages
return true;
}
catch(PDOException $e) {
echo $e->getMessage();
return false;
}
}
变量$idsimages是一个ID数组$id_imagescolumn
变量$dir_images是一个url数组,应该根据数组$idsimages的id更新
上面的 php 代码正确更新了 post 表的标题,但没有更新表图像
打印
print_r ($idsimages);
Array ( [0] => 5 [1] => 6 [2] => 7 [3] => 8 )
print_r ($dir_images);
Array ( [0] => uploads/images/image5.jpg [1] => uploads/images/image6.jpg [2] => uploads/images/image7.jpg [3] => uploads/images/image8.jpg)
如果我在函数中插入回声:
$stmt->bindParam(":id_images", $idsimage);
echo $idsimage;
$stmt->bindParam(":dir_images", $item);
echo $item;
返回:
5 image5.PNG 5 image6.jpg 5 image6.jpg 5 image6.jpg
6 image5.PNG 6 image6.jpg 6 image6.jpg 6 image6.jpg
7 image5.PNG 7 image6.jpg 7 image6.jpg 7 image6.jpg
8 image5.PNG 8 image6.jpg 8 image6.jpg 8 image6.jpg
【问题讨论】:
-
内部循环中的 bindParam 将在每次迭代时被覆盖。
-
绑定param :dir_image 时,不应该是:dir_images 吗?
-
@dnFer 谢谢,我纠正的问题只是一个错字
-
@noahnu 谢谢我打印了变量
$idsimage和$item他们被重复了好几次 -
$idsimages和$idsimage的长度是否相等?并且您想为指定id_images的记录设置dir_images?