如何将关联数组分配给变量 php

how to assign associative array to variables php

老师好,

一个初学者差点被秃头了,如何将变量分配给从数据库中获取的关联数组。 我有一个关联数组,它被检索为 follows.What 我想要的是将变量分配给这个数组,然后迭代地插入到另一个 table tbl_product.

Array
(
    [0] => Array
        (
            [pid] => 1
            [pname] => Delta Café
            [pcategory] => Mobiliário de Cozinha
            [purchaseprice] => 120
            [pstock] => 120
            [pdescription] => 120
            [pimage] => 61379859e4d6d.jpeg
        )

    [1] => Array
        (
            [pid] => 2
            [pname] => Baygon
            [pcategory] => Material de Higiene e Limpeza
            [purchaseprice] => 500.58
            [pstock] => 8
            [pdescription] => 
            [pimage] => 613b649f23a5f.jfif
        )

我的代码,

        
if(isset($_POST['btnaddproduct'])){
    $select=$pdo->prepare("select * from tbl_pending");
    $select->execute();
    
  $row=$select->fetchAll(PDO::FETCH_ASSOC);
   
    foreach($row as $product_details=>$key){
    
        $productname=$product_details['pname'];
        $category=$product_details['pname'];
        $stock=$product_details['stock'];
        $description=$product_details['pdescription'];
        $productimage=$product_details['pimage'];
        
   
    $insert=$pdo->prepare("insert into tbl_product(pname,pcategory,purchaseprice,pstock,pdescription,pimage) values(:pname,:pcategory,:purchaseprice,:pstock,:pdescription,:pimage)");     
     $insert->bindParam(':pname',$productname); 
     $insert->bindParam(':pcategory',$category);
     $insert->bindParam(':purchaseprice',$productprice);
     $insert->bindParam(':pstock',$stock);
     $insert->bindParam(':pdescription',$description);
     $insert->bindParam(':pimage',$productimage);     
   }
    

我注意到只插入了 1 项。我想要的是遍历数组, 插入到 tbl_product table 中,插入成功后我想从 tbl_pending table 中删除插入的角色。 我将不胜感激。

您没有正确使用准备好的语句。

准备好的语句让您准备一次语句,以后可以使用不同的值重复使用多次。

你也用错了foreach()。在您的示例中:

foreach($row as $product_details => $key)

您正在将 $product_details 设置为数组索引,而 $key 将包含实际数据。

请参阅下面的示例以了解它应该如何:

// Prepare the statement only once, before the loop so we can reuse it inside
$insert = $pdo->prepare("insert into tbl_product(pname,pcategory,purchaseprice,pstock,pdescription,pimage) values(:pname,:pcategory,:purchaseprice,:pstock,:pdescription,:pimage)");

// Iterate each row as $product_details
foreach($row as $product_details) {

    // Now all we need to do is bind the new values for the placeholders    
    $insert->bindParam(':pname', $product_details['pname']); 
    $insert->bindParam(':pcategory', $product_details['pcategory']);
    $insert->bindParam(':purchaseprice', $product_details['pproductprice']);
    $insert->bindParam(':pstock', $product_details['stock']);
    $insert->bindParam(':pdescription', $product_details['pdescription']);
    $insert->bindParam(':pimage', $product_details['pimage']);     
    
    // And now we need to execute the statement to store those bound values
    $insert->execute();
}

注:
不过,您需要修复一些 variable/array 键名,因为您的代码似乎有一些 typos/duplicates (比如产品名和类别都设置为 pname 等)。但这显示了正确的流程。