当前位置: 首页 > 面试题库 >

带有PDO的多个插入[重复]

端木元青
2023-03-14
问题内容

这个问题已经在这里有了答案

使用PDO插入多行
(1个答案)

4年前关闭。

我有数据库表:imagescategory

当前,唯一要插入类别表的函数与此类似:

public function add($ttitle)
{      
try
    {
        $stmt = $this->db->prepare("INSERT INTO category (title) VALUES(:title)");
        $stmt->bindparam(":title",$ttitle);                 
        $stmt->execute();
        return true;

    }
    catch(PDOException $e)
    {
        echo $e->getMessage();  
        return false;
    }

}

我有一种形式来输入标题和插入URL图像的可能性。

通过单击提交标题,我要转到类别表,到目前为止,图像应该转到表图像,每个图像都有一个ID,但内部连接到该类别的ID。

桌子images

id_image | category_id | dir_image

我无法正确执行此操作

$stmt = $this->db->prepare("INSERT INTO category (title) VALUES(:ttitle)");

$stmt = $this->db->prepare("SELECT id_image FROM images WHERE id_category = category_id ");

我想要的结果示例

html表格

Category title: Test
Image1:   image1.png
Image2:   image2.png
Image3:   image3.png
Image4:   image4.png
              Submit

提交后

表类别:

 id_category | title
    1          Test

表格图片:

 id_image | category_id | dir_image
    1            1         image1.png
    2            1         image2.png
    3            1         image3.png
    4            1         image4.png

更新:

public function add($ttitle,$images)
{
try {
        $stmt = $this->db->prepare("INSERT INTO category (title) VALUES(:title)");
        $stmt->bindparam(":title",$ttitle);                    
        $stmt->execute();

        $lastId = $db->lastInsertId();

       $imgs = count($images);
       for ($i = 0; $i < $imgs; $i++){

       $stmt = $this->db->prepare("INSERT INTO images (category_id, dir_image) VALUES (:title)");
        $stmt->bindparam(":category_id",$lastId); 
        $stmt->bindparam(":dir_image",$images);
        $stmt = $this->db->prepare($sql);
        $stmt->execute()

        }



        return true;
    }
    catch(PDOException $e) {
        echo $e->getMessage();    
        return false;
    }

}

问题答案:

几件事:

  1. for循环内删除第二个prepare语句
  2. 将绑定的参数添加到VALUES()sql语句中
  3. $images使用for循环迭代器索引数组或使用foreach

请参阅调整后的for循环:

$stmt = $this->db->prepare("INSERT INTO images (category_id, dir_image) 
                            VALUES (:category_id, :dir_image)");

$stmt->bindParam(":category_id" ,$lastId); 
$stmt->bindParam(":dir_image", $image);
for ($i = 0; $i < count($images); $i++){
    $image = $images[$i];
    $stmt->execute();
}

或者使用foreach循环 (假设是一维数组)

$stmt = $this->db->prepare("INSERT INTO images (category_id, dir_image) 
                            VALUES (:category_id, :dir_image)");

$stmt->bindParam(":category_id", $lastId); 
$stmt->bindParam(":dir_image", $item);
foreach ($images as $item){
    $stmt->execute();
}


 类似资料:
  • 问题内容: 使用PDO运行以下查询(实际上,我使用准备好的语句,但存在相同的问题) 如何获得有关和的记录的ID ? 从字面上返回最后一个ID。 采取这个最后的ID,减去记录数并假定范围覆盖了我的所有记录,是否足够?会有差距/跳跃。是否保证此查询是原子查询? 问题答案: 如果您使用的是MyISAM表,则由于表级别的锁定机制,您只能获得一定范围的ID。 阅读http://dev.mysql.com/d

  • 问题内容: 您好,我正在制作一个在pdo中进行多次插入的类。 是这样的 搜索后,我发现我必须建立类似 然后用这个执行 ,其中是 问题是我还得到一个错误就如何解决呢? 这是我正在做的一小段。 问题答案: 避免并发症的简单方法是这样的 但是,这将多次执行该语句。因此,最好创建一个较长的单个查询来执行此操作。 这是我们如何执行此操作的示例。

  • 非常类似于使用PDO数组更新多个MySQL表列。 但是我使用了一个复杂的形式 更新只是给我一个没有错误的空白页??? 注意:使用了MySQLi,工作正常,只是更新到了PDO。 $data2返回了正确的数组。 这可能是订单吗?IE输出必须匹配列顺序? 分析了使用带有PDO的数组和https://guwii.com/bytes/update-multiple-database-columns-usin

  • 我想知道是否可以使用一个准备好的语句插入多行。下面是我通常如何在DB中插入一行的示例: 我要插入的值将来自一个数组,例如:$values[0]['val1'];$values[0]["val2“];$values[0]['val3'];$values[1]['val1'];$values[2]['val2']; 等等。 这段代码可能需要一次插入几百行,我想过创建一个循环来创建数百个参数,然后为每一

  • 问题内容: 在线注册期间,客户可以选择他们选择注册的许多程序。这些程序是三位数的整数,并存储在数组中。 例如: 我想注册Programid 155、165、175和185。 我的数组设置很简单: 当需要将此信息插入关联表时,我还包括注册另一部分的其他元素: 例如,如果我正在执行一个SINGLE程序insert语句,它将看起来如下: 我通常会为上面的数组创建一个简单的循环,该循环将调用sql语句的多

  • 我有一个查询,我想插入最后一个ID。字段ID是主键,并自动递增。 我知道我必须用这句话: 该语句适用于这样的查询: 但是如果我想使用此语句获取ID: 我得到这个错误: 我做错了什么?