如何将关联数组分配给变量 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
等)。但这显示了正确的流程。
老师好,
一个初学者差点被秃头了,如何将变量分配给从数据库中获取的关联数组。 我有一个关联数组,它被检索为 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
等)。但这显示了正确的流程。