【问题标题】:Update Table with two foreach用两个 foreach 更新表
【发布时间】: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

标签: php arrays pdo foreach


【解决方案1】:

你需要这样的东西:

$stmt = $this->db->prepare("UPDATE images SET
   dir_images = :dir_images
   WHERE id_images = :id_images");

foreach ($idsimages as $key => $idsimage) { 
    $stmt->bindParam(":id_images", $idsimage);
    $stmt->bindParam(":dir_images", $dir_images[$key]);             

    $stmt->execute();
} // end foreach idsimages

【讨论】:

  • 但是$idsimage也是一个数组
  • $idsimage$dir_images 看起来怎么样?
  • 还显示images 表的结构。也许你的列名有拼写错误 dir_images -> dir_imageid_images -> id_image
猜你喜欢
  • 2017-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-17
  • 2022-06-15
  • 2011-06-23
相关资源
最近更新 更多